Почему я не могу больше отправить в гнездо для прослушивания? - PullRequest
0 голосов
/ 13 июля 2010

Я пишу простой прокси-сервер (больше - регистратор пакетов) для онлайн-игры на C #. Основной процесс входа в систему выглядит следующим образом:

Клиент-> Сервер: пакет входа в систему - мой прокси получает пакет, отображает его и отправляет на сервер.

Сервер-> Клиент: Подключен! Пакет - мой прокси-сервер снова получает пакет, он также отображает его снова, но при попытке отправить его клиенту, он говорит:

"Запрос на отправку или получение данных был отклонен, поскольку сокет не подключен и (при отправке на сокет дейтаграммы с использованием вызова sendto) адрес не был предоставлен."

Мой код: http://lesderid.pastebin.com/NkEy7qQp

Ответы [ 2 ]

1 голос
/ 13 июля 2010

Прослушивающие сокеты TCP имеют только одну функцию - принимать клиентские соединения. Соединение будет занимать новый дескриптор сокета , т. Е. Новый сокет будет создаваться для каждого нового клиентского соединения (а в C это то, что возвращает accept(2) системный вызов).

Вы не можете send(2) или recv(2) данные на слушающих сокетах.

1 голос
/ 13 июля 2010
171: listenSocket.Send(RecvBuffer2);

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

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