我目前正在研究服务器/客户端,基本功能已基本完成。但是我在关闭并打开测试客户端程序后发送数据时遇到了问题。
这是我的断开连接方法的样子:
public void Disconnect()
{
if (m_clientSocket != null)
{
m_clientSocket.Shutdown(SocketShutdown.Receive);
}
}
测试数据如下所示:
Client cl = new Client(888, "127.0.0.1");
cl.Connect(null);
cl.DataArrived += MyListenerMethod;
cl.Disconnect();
cl.Connect("hello");
cl.SendData("hello2");
现在的问题是,当我关闭并重复启动客户端程序时,它有时会发送“hello”和“hello2”,有时只会发出“hello”。 我很确定这是按照设计工作但我希望在程序终止之前发送所有数据,我猜我必须使用延迟或类似的东西来实现这一点。我知道这似乎是一个微不足道的问题,但我想知道这是否可能。
答案 0 :(得分:0)
听起来套接字正在缓冲要发送的数据,但是在关闭时不会刷新套接字。结果是,如果您尝试过早关闭套接字,则永远不会发送缓冲数据。
根据这篇博客文章,您可能会对NetworkStream
课程感到更幸运。
(或者使用WCF或.Net远程处理并让它处理所有这些混乱的东西)