TCP服务器和客户端C#最佳实践

TCP服务器和客户端C#最佳实践,c#,tcp,tcpclient,tcpserver,C#,Tcp,Tcpclient,Tcpserver,我正在编写一个TCP客户端和服务器应用程序。 服务器收到一个请求,并在一个单独的线程中为每个客户端打开一个套接字。 客户端可能会注册事件,一旦事件发生,服务器应将事件发送给客户端。 我的问题是,保存套接字并在请求的同一个打开的套接字上发送事件是一种很好的做法。i、 e.如果没有发送消息,那么在超时后套接字是否会关闭?有必要保留吗?在客户端仍然连接的情况下,是否有其他情况会导致断开连接。 为每个事件(服务器发送的每条消息)创建新套接字的开销是多少?您可以建立活动连接,而不需要在服务器和客户端之间使

我正在编写一个TCP客户端和服务器应用程序。 服务器收到一个请求,并在一个单独的线程中为每个客户端打开一个套接字。 客户端可能会注册事件,一旦事件发生,服务器应将事件发送给客户端。 我的问题是,保存套接字并在请求的同一个打开的套接字上发送事件是一种很好的做法。i、 e.如果没有发送消息,那么在超时后套接字是否会关闭?有必要保留吗?在客户端仍然连接的情况下,是否有其他情况会导致断开连接。
为每个事件(服务器发送的每条消息)创建新套接字的开销是多少?

您可以建立活动连接,而不需要在服务器和客户端之间使用活动数据包进行TCP连接。如果连接断开,两侧都将断开

如果我理解正确,您可以在数据包接收功能中轻松检查连接是否断开。只需导入一个功能,如果断开连接,该功能将重新连接

但如果在服务器发布新的“事件”之前断开连接,然后重新连接,则客户端无法接收此数据包

如果忽略此问题,请尝试以下操作:

  • 将事件保存在列表中
  • 向每个事件添加时间戳属性
  • 确保客户机能够记住最后一次的时间戳值 它收到的事件
  • 使客户端发送一个请求,其中包括重新连接后丢失事件的最后一个事件的时间戳值
  • 若服务器接收到该请求,则使其发送时间戳大于请求数据包中LastTimeStamp参数的事件

  • 我建议保持它的活力。我记得读过一篇文章说,如果你保持TCP连接的活力,它最终会变得更快。只要确保你不断地通过插座发送一些东西,以确保它能保持活力。