@VZVZ
Reverse-Engineer, Software Developer, Architect

Как соединить 2 компа, подключенных к инету: на одном запустить один экземпляр моей программы, на другом — другой, и чтобы экземпляры общались по TCP?

Ранее работав только с HTTP (протоколом довольно высокоуровневым и простым), сейчас потихоньку спускаюсь глубже, до уровня TCP и более редких протоколов на его базе.
В основном интересуюсь сниффингом и созданием ботов, имитирующих клиенты для уже имеющихся серверов (обычно TCP используют сервера на NodeJS, также есть XMPP и другие протоколы быстрого обмена сообщениями, где TCP + шифрование TLS)

Но заодно решил заняться и прямым назначением TCP/IP, то есть прямым соединением двух компов без стороннего HTTP-сервака (который суть самое простое и тупое решение подобной задачи).

Итак.
Я написал 2 тестовые программы с помощью System.Net.Sockets, одна сервер, другая клиент.
Клиент отправляет серверу тестовый пакет, сервер по его получению шлет ответный пакет клиенту, это не суть. IP и порт задаются юзером и у сервера и у клиента.
На локалхосте все работает.

Но вот есть у меня 2 компа с Windows 8/8.1 (не Server), и надо, чтобы клиент стоят на одном из них, а сервер на другом.
Что для этого надо сделать?
1) На каком IP запустить сервер, к какому IP подключаться с клиента? А что с портами?
2) Что где настроить?
3) Вообще, конечно, хотелось бы, чтобы физически компы не были никак связаны, только через интернет. Причем подключены не обязательно к одной точке.
Возможно такое?
Но, если надо, можно создать и свою Wi-Fi-точку/сеть, можно и кабелем подключить.
Что именно из этого необходимо?

Насчет гугла, попрошу не писать.
Я умею гуглить, и параллельно ожиданию ответов на мой вопрос я буду гуглить.
Но это дело совсем не легкое, у меня и так это получается лучше многих других. Но сейчас у меня настроение хреновое, и если честно, вообще ничего делать неохота. А надо.

UPD: Блин-как-же-всё-сложно-неохота. Гори оно все огнем, возьму http
  • Вопрос задан
  • 2816 просмотров
Пригласить эксперта
Ответы на вопрос 4
@Hydro
C#/.NET Developer
1) На каком IP запустить сервер, к какому IP подключаться с клиента? А что с портами?
2) Что где настроить?
3) Вообще, конечно, хотелось бы, чтобы физически компы не были никак связаны, только через интернет. Причем подключены не обязательно к одной точке.


1) Если серверной машине не выдается динамический IP от провайдера, то все просто либо на 0.0.0.0 либо к внешнему IP серверной машины делать привязку в программе. Если серверная машина находится за NAT, то нужно пробрасывать порты, как правило NAT включен на домашнем роутере, либо у провайдера. Если NAT нет, то всё просто, на каком порту открыл сервер, на тот и подключаешься с клиента
2) Проверить, что серверный порт не блокирует фаервол/антивирус и что выбранный порт не конфликтует с заранее заданным значением (номер порта лучше выбирать > 1000).
3) TCP работает поверх IP, а протокол IP вообще нас изолирует от понятия "физически связаны", на IP уровне и выше мы оперируем асбтрактным понятием "маршрут", а не "витая пара" или "вифи коннект"
Ответ написан
@antonsr98
Системный Администратор
как пример сервер у вас стоит на ip 192.168.0.101 вещает и слушает на 1000 порту, клиент стоит на пк с ип 192.168.0.102 стоит клиент который слушает и принимает пакеты на 1000 порту. почитайте про клиент-серверные приложения
Ответ написан
Комментировать
petermzg
@petermzg
Самый лучший программист
На сервере у вас должен быть public IP. Для его получения обратитесь к провайдеру.
Далее если ваш копьютер в локальной сети (за роутером или сервером), то через NAT нужно сделать проброс порта от сервера/роутера, до копьютера, где установленно серверная часть приложения.
Ответ написан
Комментировать
@none7
  1. IPAddress.Any порт любой какой пожелаете, у каждого сетевого интерфейса есть адрес, его и указывать на удалённой машине, ну или в DNS прописывать. Все адреса системы можно получить через Dns.GetHostAddresses (Dns.GetHostName())
  2. Разве, что брандмауэр настроить, если включен
  3. С компом имеющим "белый" IPv4-адрес или IPv6-адрес любой может запросить соединение независимо от сети и расстояния до этой сети. В случае компа за NAT, только находящиеся в той же сети или через UDP + STUN
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы