Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 套接字对象生命周期_C#_Sockets_Tcp_Lifecycle - Fatal编程技术网

C# 套接字对象生命周期

C# 套接字对象生命周期,c#,sockets,tcp,lifecycle,C#,Sockets,Tcp,Lifecycle,我正在使用Socket对象通过tcp向其他程序发送命令 我想知道什么是更好的决定: 在每个命令发送/接收会话上初始化Socket对象 然后把它关上 或者要初始化一个全局Socket对象,请使用它发送所有 命令/接收响应并在程序关闭时关闭 因此,问题是,对于“相同”操作,我应该多久关闭一次套接字对象?这取决于您的应用程序要求。例如 假设您正在编写smtp客户端,那么服务器将永远不允许您连接,这也是请求/响应类型协议(例如,您发送请求以检查任何邮件并接收其响应),那么您必须在请求完成后关闭套接字。

我正在使用
Socket
对象通过tcp向其他程序发送命令

我想知道什么是更好的决定:

  • 在每个命令发送/接收会话上初始化
    Socket
    对象 然后把它关上
  • 或者要初始化一个全局
    Socket
    对象,请使用它发送所有 命令/接收响应并在程序关闭时关闭

  • 因此,问题是,对于“相同”操作,我应该多久关闭一次套接字对象?

    这取决于您的应用程序要求。例如 假设您正在编写smtp客户端,那么服务器将永远不允许您连接,这也是请求/响应类型协议(例如,您发送请求以检查任何邮件并接收其响应),那么您必须在请求完成后关闭套接字。
    但是,如果您正在编写一些类似聊天的应用程序,那么您可能不想关闭套接字。因为聊天应用程序服务器可以在服务器接收到的任何时间向您发送其他人的聊天信息,所以在这种情况下,服务器也会在没有您请求的情况下推送您的数据。

    这取决于具体情况,但第一种方法是正确的,使用频率要低得多。“不过这里的信息太少了。”乔恩,对不起,补充了更精确的问题。只是想知道什么更好,在收到响应后关闭套接字,或者离开对象,重用它以获得更多响应并执行更多发送操作。您是在尝试同步还是异步方法?无论如何,我会接受你的第一个建议,它似乎是一种更干净的资源处理方式。@peer,异步。所以,我会在收到响应后关闭套接字。非常感谢。