我编写了一个TCPIP服务器,该服务器实现了FileSystemWatcher,并用从FSW获取的新文件中解析出的数据填充了队​​列。

单个客户端将连接到该服务器,并从队列中请求数据(其他客户端无需随时连接)。如果不存在数据,客户端将等待(1秒),然后重试。

客户端和服务器都是异步编写的-我的问题是:客户端应该为每个事务(在while循环内)创建一个新的套接字,还是只是将套接字保持打开状态(在while循环外)?

client.Connect()

while(bCollectData)
{
    ... communicate ...

    Thread.Sleep(1000);
}

client.Shutdown(SocketShutdown.Both);
client.Close();

最佳答案

我建议您将套接字保持打开状态,甚至最好将其阻止在服务器上,这样就不必执行Thread.Sleep了。当服务器有一些数据时,他会将消息发送给客户端。

该代码看起来像这样

while(bCollectData)
{
   _socket.recv(...); //this line will wait for response from server
   //... process message and start another wait in the next iteration.
}

使用这种方法,您将立即获得所有消息,并避免在客户端和服务器之间发送不必要的消息(返回该服务器的消息没有数据)。

关于c# - 每次交易后都应该关闭套接字(TCPIP)吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3724044/

10-14 13:28
查看更多