代码之家  ›  专栏  ›  技术社区  ›  Jess

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

  •  5
  • Jess  · 技术社区  · 15 年前

    我已经编写了一个TCPIP服务器,它实现了一个文件系统观察程序,并用从FSW获取的新文件中解析的数据填充队列。

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

    客户机和服务器都是异步写的——我的问题是:客户机应该为每个事务(在while循环中)创建一个新的套接字,还是只保留套接字打开(在while循环之外)?

    client.Connect()
    
    while(bCollectData)
    {
        ... communicate ...
    
        Thread.Sleep(1000);
    }
    
    client.Shutdown(SocketShutdown.Both);
    client.Close();
    
    3 回复  |  直到 15 年前
        1
  •  6
  •   Insomniac    15 年前

    我建议您保持套接字打开,最好在服务器上阻塞它,这样您就不必执行线程。当服务器将拥有一些数据时,他将向客户机发送消息。

    代码看起来像这样

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

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

        2
  •  1
  •   Daniel    15 年前

    我会让套接字在循环之外保持打开状态,重新连接每个迭代似乎是在浪费资源。

        3
  •  1
  •   chriszero    15 年前

    我不会关上插座的。每次连接时都会有一些握手。

    推荐文章