繁体   English   中英

服务器套接字在SendCallback中关闭连接

[英]Server socket close the connection in SendCallback

我创建一个windows form是服务器套接字,而android app是客户端套接字。 对于服务器套接字,我遵循MSDN上的本教程 我的问题是,当我调用从服务器发送的消息时,套接字将关闭,并且不再能接收到来自用户的消息。 当我从SendCallback方法删除ShotDownClose套接字时,在停止服务器之前,没有任何东西发送到客户端,并且消息将发送到客户端。 这是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的备注部分( 此处 )所述。 关闭处理程序将强制进行一次刷新并发送套接字中仍剩余的任何内容。

使用面向连接的Socket时,请始终在关闭Socket之前调用Shutdown方法。 这样可确保在关闭所有数据之前,已在连接的套接字上发送和接收所有数据。

通过在msdn文章上实现的设计,它需要关闭。 Google搜索将为您显示不同的实现。

希望这可以帮助。

回答我的问题:服务器套接字将数据放入缓冲区(这是WireShark所说的),但是android客户端无法读取数据。 我发现这是因为我在Java客户端中使用in.readLine()从套接字读取数据,但是仅当发送数据的末尾带有末尾行时它才起作用,所以我只在任何末尾添加\\n来自服务器的消息,现在一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM