我应该在每次交易后关闭套接字(TCPIP)吗?

时间:2010-09-16 05:53:21

标签: c# sockets tcp

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

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

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

client.Connect()

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

    Thread.Sleep(1000);
}

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

3 个答案:

答案 0 :(得分:6)

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

代码看起来像这样

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

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

答案 1 :(得分:1)

我会在循环外部打开套接字,重新连接每次迭代似乎都浪费资源。

答案 2 :(得分:1)

我不会关闭套接字。每次连接都会有一些握手。