Проблема с подключением TCP-сервера/клиента С#

поэтому в настоящее время я программирую простой сервер/клиент, чтобы играть в некоторые базовые игры, которые я делал в прошлом.

Проблема в том, что я могу подключиться только тогда, когда я нахожусь на том же компьютере, а не через локальную сеть (как я хотел бы, чтобы это работало), вот код, с которым я работаю:

Сервер:
IPEndPoint Ep = new IPEndPoint(IPAddress.Any, 8000); listener = new TcpListener(Ep); listener.Start();

Клиент:
IPAddress direc = IPAddress.Parse(ipManager); Ep = new IPEndPoint(direc, 8000);

Проблема в том, что когда я пытаюсь подключиться с другого компьютера (очевидно, подключенного к тому же Wi-Fi), я получаю следующую ошибку:

Попытка подключения не удалась, так как подключенная сторона не ответила должным образом через некоторое время, или сбой установленного подключения, потому что подключенный хост не ответил 192.168.0.5:8000

Я также должен добавить, что это код, когда я пытаюсь подключиться:

Разрыв:
TcpClient client = listener.AcceptTcpClient();

Клиент:
client.Connect(Ep);

Очевидно, когда я подключаюсь, сервер никогда не «принимает» соединение, но я не смог понять, почему это так.


person waclock    schedule 03.07.2012    source источник
comment
Какой язык вы используете? С++? Что это за платформа, винда или линукс?   -  person Claudio    schedule 04.07.2012
comment
О, извините, я забыл упомянуть об этом! Это С#, Visual Studio. Я работаю над WPF   -  person waclock    schedule 04.07.2012
comment
Вы добавили исключение в брандмауэр Windows? Попробуйте отключить его для пробы и попробуйте снова подключиться, проверьте работает ли он.   -  person sergiogarciadev    schedule 04.07.2012
comment
Брандмауэр отключен на обоих компьютерах, есть другие идеи? :С   -  person waclock    schedule 04.07.2012
comment
Можете ли вы пропинговать свои две машины туда и обратно? Возможно, ваш WiFi-маршрутизатор блокирует двухточечные соединения в вашей глобальной сети. Если пинг не работает, проблема не в вашем коде   -  person GETah    schedule 04.07.2012


Ответы (2)


Поскольку он работает локально, вы, вероятно, используете 127.0.0.1 или localhost в качестве интерфейса прослушивания сервера. Попробуйте использовать 0.0.0.0, чтобы он прослушивал все интерфейсы, или укажите IP-адрес интерфейса, который вы хотите, чтобы сервер прослушивал.

person Claudio    schedule 03.07.2012
comment
Я использую 0.0.0.0, все равно ничего :/ - person waclock; 04.07.2012
comment
Вы пробовали что-то подобное? new IPEndPoint(IPAddress.Parse("0.0.0.0"), 8000) - person Claudio; 04.07.2012
comment
Есть ли на сервере какое-либо программное обеспечение для перехвата пакетов (например, Wireshark)? Если вы это сделаете, вы можете попробовать подключиться и проверить, действительно ли клиентские пакеты поступают на указанный интерфейс сервера (192.168.0.5). - person Claudio; 04.07.2012
comment
Попробуйте запустить свой сервер, а затем введите эту команду в командной строке DOS: netstat -a | find "LISTENING". Если сервер работает правильно, он должен показывать порт 8000 как прослушиваемый. - person Claudio; 04.07.2012
comment
Появляется: TCP 0.0.0.0:8000 ПРОСЛУШИВАНИЕ - person waclock; 04.07.2012
comment
Когда я пытаюсь подключиться с клиента к серверу, конечная точка должна быть 192.168.0.5:8000, верно? (Сервер находится в 192.168.0.5, а клиент в 192.168.0.9). - person waclock; 04.07.2012
comment
давайте продолжим это обсуждение в чате - person Claudio; 04.07.2012
comment
На случай, если у кого-то возникнет эта проблема: Моя проблема была в брандмауэре АНТИВИРУСА, который я забыл проверить. Это может быть глупо, но это происходит! :) - person waclock; 04.07.2012

Попробуйте подключиться к порту с помощью telnet или netcat. Проверьте, доступен ли порт.

$ nc 192.168.0.5 8000
$ telnet 192.168.0.5 8000
person Igor Chubin    schedule 03.07.2012
comment
Как мне это использовать? Извините за невежество :Р - person waclock; 04.07.2012
comment
Вы должны запустить программу и посмотреть, что произошло. Либо вы получите сообщение о том, что порт закрыт (или ничего в случае варианта nc), либо вы получите соединение. - person Igor Chubin; 04.07.2012
comment
Это С#, это не С#, не так ли? - person waclock; 04.07.2012
comment
@waclock, это программы для Linux. Поскольку теперь вы сказали, что программируете на C #, вы, вероятно, работаете в Windows, и поэтому у вас их не будет. Telnet у вас может быть, хотя идея состоит в том, чтобы просто попытаться подключиться к порту вашего сервера, чтобы увидеть, прослушивает ли он. - person Claudio; 04.07.2012
comment
labnol.org/software/windows-telnet-command/18222 Здесь вы можете иметь теленет для окон. Вы пробовали просто пинговать сервер? (возможно из командной строки Windows) - person Mark; 21.01.2014