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

时间:2016-01-31 09:09:17

标签: java c# android .net sockets

我创建了一个var tmp=document.getelememntbyid('iframeid'); ,它是服务器套接字,windows form是客户端套接字。对于服务器套接字,我遵循this tutorial from MSDN。我的问题是当我从服务器调用send时,socket将关闭,我无法再收到用户的消息。当我从android app方法中删除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(); }

2 个答案:

答案 0 :(得分:0)

如msdn(here)的备注部分所述。关闭处理程序会强制执行刷新并发送仍留在套接字中的任何内容。

  

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

在msdn文章中实现了设计,它需要关闭。谷歌搜索将向您展示不同的实现。

希望这有帮助。

答案 1 :(得分:0)

回答我的问题:服务器套接字将数据放入缓冲区(这是WireShark所说的)但Android客户端无法读取数据。我弄清楚这是因为我在我的java客户端中使用in.readLine()来从套接字中读取数据,但它仅在发送数据末尾有结束时起作用,所以我只需要在{}添加\n来自服务器的任何消息的结束,现在每件事情都可以。