我创建了一个var tmp=document.getelememntbyid('iframeid');
,它是服务器套接字,windows form
是客户端套接字。对于服务器套接字,我遵循this tutorial from MSDN。我的问题是当我从服务器调用send时,socket将关闭,我无法再收到用户的消息。当我从android app
方法中删除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();
}
。
答案 0 :(得分:0)
如msdn(here)的备注部分所述。关闭处理程序会强制执行刷新并发送仍留在套接字中的任何内容。
使用面向连接的套接字时,请在关闭套接字之前始终调用Shutdown方法。这可以确保所有数据在关闭之前在连接的套接字上 发送和接收。
在msdn文章中实现了设计,它需要关闭。谷歌搜索将向您展示不同的实现。
希望这有帮助。
答案 1 :(得分:0)
回答我的问题:服务器套接字将数据放入缓冲区(这是WireShark所说的)但Android客户端无法读取数据。我弄清楚这是因为我在我的java客户端中使用in.readLine()
来从套接字中读取数据,但它仅在发送数据末尾有结束时起作用,所以我只需要在{}添加\n
来自服务器的任何消息的结束,现在每件事情都可以。