закрытие асинхронного клиентского сокета? - PullRequest
0 голосов
/ 01 октября 2010

эй, я хочу задать вопрос об асинхронной связи через сокет на c #. пока все работает хорошо, кроме закрытия клиентов. Сервер не закрывает сразу рабочий сокет для клиента, когда клиент закрывает соединение. это закрывается несколько раз спустя. как я могу решить эту проблему ??

1 Ответ

2 голосов
/ 27 января 2011

проверьте эту ссылку http://msdn.microsoft.com/en-us/library/fx6588te.aspx#2 Моя проблема в том, что я не могу держать соединение открытым после получения сообщения от клиента. Если я сделаю, как сказано в этом примере, соединение закрывается сразу после получения сообщения. Если я не закрою соединение, я могу получить только одно сообщение и больше ничего. Если у вас есть какое-то решение, бросьте это так.

Я понял!

Если у кого-то еще есть эта проблема, он должен сделать следующее. Изменить этот код:

content = state.sb.ToString()

к этому:

 content = state.sb.ToString().TrimEnd(New Char() {ChrW(13)})

тогда вы должны изменить это:

 If content.IndexOf("<EOF>") > -1 Then

к этому:

If content.IndexOf(New Char() {ChrW(13)}) > -1 Then

это получит Enter (chrw (13)) как конец строки.

тогда вот:

Console.WriteLine("Read {0} bytes from socket. " + vbLf + " Data : {1}", content.Length, content)
' Echo the data back to the client.
Send(handler, content)

вы должны сделать это:

Console.WriteLine("Read {0} bytes from socket. " + vbLf + " Data : {1}", content.Length, mid(content,1,content.length -2))
' Echo the data back to the client.
'Send(handler, content)
 content = String.Empty
 state.sb.Clear()
 handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, New AsyncCallback(AddressOf ReadCallback), state)

И все готово.

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