В C # как у меня сокет продолжать оставаться открытым и принимать новые данные? - PullRequest
0 голосов
/ 22 февраля 2011

У меня есть небольшая форма Windows, когда я нажимаю кнопку, гнездо переходит в состояние прослушивания. Я отправляю данные из клиентской программы (просто текст) и моя форма отображает информацию.

Я хочу, чтобы программа продолжала прослушивать дополнительные данные, пока я не нажму кнопку «Отмена» или что-то в этом роде.

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

Указан неверный аргумент

Эта ошибка появляется только при втором нажатии кнопки. Я попытался закрыть сокет после получения информации. И установка LingerOption в false.

Код, который вызывается, когда я нажимаю кнопку прослушивания, -

        s1.Bind(endP);
        s1.Listen(10);
        connected = true;
        Receive();
        s1.Shutdown(SocketShutdown.Both);
        s1.Close();

Кто-нибудь имеет представление о том, что мне не хватает?

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

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

 s1.Bind(endP);
 s1.Listen(10);
 while (true) {
     Socket s2 = s1.Accept();
     s2.Receive();
     s2.Close();
 }
1 голос
/ 22 февраля 2011

Я думаю, вы можете неправильно понять значение «Слушайте».Прослушивание не для начала приема ввода, а для начала проверки новых соединений.Ваше утверждение о «прослушивании дополнительных данных» предполагает, что вы полагаете, что прослушивание предназначено для получения данных, а не соединений.«Получить» и «Доступно» предназначены для проверки и получения дополнительных данных.Listen предназначен для маркировки сокета как получающего новые соединения, а Accept должен начать прием с нового соединения.

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