Сокет-сервер не принимает клиентов с других компьютеров (ошибка подключения: 10060) - PullRequest
0 голосов
/ 18 декабря 2011

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

Только для рабочего стола

Сервер запускается так: cSocketServer -p:2030 -i:192.168.178.22

Клиент подключается: cSocketclient -p:2030 -s:192.168.178.22

Работает нормально.

Настольный сервер, клиент для ноутбука

Сервер: cSocketServer -p:2030 -i:192.168.178.22

Клиент: cSocketclient -p:2030 -s:192.168.178.22

Точно так же, как указано выше, но это вызывает ошибку connect failed: 10060. Что по сути означает, что истекло время ожидания.

Только для рабочего стола (внешний адрес)

Сервер: cSocketServer -p:2030 -i:192.168.178.22

Клиент: cSocketclient -p:2030 -s:xx.xx.xx.xx

Где xx.xx.xx.xx - мой внешний IP-адрес.

Та же ошибка: connect failed: 10060. Порт 2030 определенно открыт и доступен, потому что я протестировал его с несколькими несвязанными приложениями, которые позволяют их пользователям выбирать свои собственные порты (например, utorrent). Пока они выполняются, whatismyip.org утверждает, что порт 2030 открыт. Но когда я запускаю мое приложение, оно сообщает об истечении времени ожидания. Эти приложения не имеют никаких специальных привилегий в брандмауэре.

Но даже если бы я испортил некоторые настройки брандмауэра / маршрутизатора (что я вполне уверен, что не сделал), это не объяснило бы, почему я не могу подключиться к серверу из моей локальной сети. Другие службы (такие как обмен файлами) работают нормально, поэтому между двумя компьютерами определенно есть связь.

Клиент и сервер работают на 64-битной Windows 7.

Также ; по какой-то причине каждый клиент, который подключается, получает свой собственный входящий порт или что-то в этом роде? Это нормально? Когда клиенты подключаются, сервер сообщает:

Accepted client: 192.168.178.22:55156
Accepted client: 192.168.178.22:55164
Accepted client: 192.168.178.22:55176

О чем это все?

Ответы [ 2 ]

1 голос
/ 18 декабря 2011

Если два TCP-соединения имеют одинаковый IP-адрес источника, IP-адрес назначения, исходный порт и порт назначения, их невозможно будет отличить друг от друга. Чтобы гарантировать, что они где-то различаются, клиенты обычно назначают уникальный исходный порт для каждого исходящего соединения, которое они устанавливают.

Что касается ошибок, вам действительно необходимо устранить неполадки. Разъемы для прослушивания отображаются в «netstat»? Вы получаете ту же проблему с выключенными брандмауэрами? Находятся ли сервер и клиент в одной локальной сети (для внутреннего адреса)? Переадресация портов включена и работает в маршрутизаторе (для случая внешнего адреса)?

Держу пари, что случай с внешним адресом не будет работать, потому что вы не настроили порт для перенаправления вашим маршрутизатором или ваш маршрутизатор не поддерживает шпильку (локальный доступ к внешнему IP). Другие программы могут работать, потому что они поддерживают UPnP или не полагаются на шпильку (весь доступ к внешним IP-адресам осуществляется извне вашей локальной сети).

У меня нет немедленного объяснения, почему ваш настольный компьютер не будет работать в вашей локальной сети. Вы уверены, что оба компьютера находятся в одной локальной сети? Могут ли они ping друг друга?

0 голосов
/ 18 декабря 2011

Избавьтесь от аргумента -i на сервере или укажите 0.0.0.0 и исправьте код так, чтобы он не считался ошибкой, что само по себе является ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...