服务器套接字关闭发送回调中的连接
本文关键字:回调 连接 套接字 服务器 | 更新日期: 2023-09-27 18:32:33
我创建了一个服务器套接字windows form
,android app
是客户端套接字。对于服务器套接字,我遵循 MSDN 的本教程。我的问题是当我调用从服务器发送时,套接字将关闭,我无法再收到来自用户的消息。当我从方法中删除ShotDown
和Close
套接字时SendCallback
在我停止服务器之前不会向客户端发送任何内容,并且消息将发送到客户端。这是SendCallback
方法:
private void SendCallback(IAsyncResult ar)
{
Socket handler = (Socket)ar.AsyncState;
int bytesSent = handler.EndSend(ar);
// When I delete this two lines, nothing send to client
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
我不明白为什么这些行必须在SendCallback
.
如 msdn 的备注部分(此处)中所述。关闭处理程序会强制进行刷新,并发送套接字中剩余的任何内容。
使用面向连接的套接字时,请始终在关闭套接字之前调用 Shutdown 方法。这可确保在关闭之前在连接的套接字上发送和接收所有数据。
在 msdn 文章上实现的设计后,它需要关闭。谷歌搜索将向您展示不同的实现。
希望这有帮助。
回答我的问题:服务器套接字将数据放入缓冲区(这就是WireShark所说的),但Android客户端无法读取数据。我想通这是因为我在 java 客户端中使用 in.readLine()
从套接字读取数据,但它仅在发送数据末尾有结束行时才有效,所以我只需在来自服务器的任何消息的末尾添加'n
,现在一切都很好。