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

时间:2013-03-10 10:12:05

标签: c# tcp tcpclient tcpserver

我正在编写一个TCP客户端和服务器应用程序。 服务器获取请求并在单独的线程中为每个客户端打开一个Socket。 客户端可能会注册事件,服务器应在事件发生后将事件发送给客户端。 我的问题是,保存套接字并在请求的同一个开放套接字上发送事件是一个好习惯。即如果没有消息被发送会在一段时间后套接字关闭怎么办?是否需要keepAlives?是否有任何其他方案会导致客户端仍然连接时断开连接。 为每个事件创建一个新套接字的开销是多少 - 服务器发送的每条消息都是什么?

1 个答案:

答案 0 :(得分:0)

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

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

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

如果您通过此问题,请尝试以下操作:

  1. 将您的活动保存在列表中。
  2. 为每个事件添加时间戳属性。
  3. 确保客户端可以记住最后一个的时间戳值 收到的活动。
  4. 让客户端发送请求,其中包含重新连接后丢失事件的最后一个事件的时间戳值。
  5. 如果服务器收到此请求,则使其发送请求数据包中时间戳大于LastTimeStamp参数的事件。