服务器套接字关闭发送回调中的连接

本文关键字:回调 连接 套接字 服务器 | 更新日期: 2023-09-27 18:32:33

我创建了一个服务器套接字windows formandroid app是客户端套接字。对于服务器套接字,我遵循 MSDN 的本教程。我的问题是当我调用从服务器发送时,套接字将关闭,我无法再收到来自用户的消息。当我从方法中删除ShotDownClose套接字时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,现在一切都很好。