gpt4 book ai didi

c# - 使用相同的 tcpclient 进行读/写并保持事件状态

转载 作者:可可西里 更新时间:2023-11-01 02:32:25 26 4
gpt4 key购买 nike

我有以下情况:
客户端 -> 路由器 -> 互联网 -> 专用服务器

客户端:启动时,连接到服务器并保持连接打开。偶尔会收到来自服务器的文件更改通知。启动同步过程,如果成功则通知服务器。有时可能会失去连接,因此必须建立新的连接。

服务器(互联网): 包含有时会更改的文件。接受传入的客户端,并为该客户端保留 tcpclient 对象。它永远不能直接与客户端连接,因为客户端位于多个路由器之后;这就是必须保持连接打开的原因。进行更改时通知客户端。并且还会检查每个客户端是否有同步成功的消息。

问题:

  1. 如何有效地保持客户端和服务器端的连接打开?

  2. 当客户端想要通知服务器时会发生什么同步过程成功,但与此同时服务器通知客户进行新的更新..?

  3. 只创建一个 Tcpclient(客户端)并在整个程序中保留该对象是否是一个好习惯?当某些网络操作失败时,尝试再次连接此 tcpclient 对象?

我做了很多研究,但无法真正找到一直使用相同 tcpclient 的东西..

顺便说一句:这是一个基于我之前帖子的新线程,是否提出了这个解决方案(重用 tcpclient)(udp packet not coming through)

问候 Daan,提前感谢您的关注

最佳答案

How do I effectively keep my connection open on the client and server side?

如果您激活 SO_KEEPALIVE,TCP 发送可以默认发送保持事件消息。但是发送您自己的保持事件消息可能是个好主意(以防止路由器等中的空闲连接断开)

What happens when the client wants to notify the server that the sync process was a success, but at the meantime the server notifies for client for a new update..?

设计您的协议(protocol),使其具有请求 ID,并且通知和回复之间可以不同。

将您的 API 设计为同步的,但使用异步套接字处理。

Is it a good practice to just create a Tcpclient (client-side) and keep this object throughout the whole program? And when some network operation failed, try to connect with this tcpclient object again?

您确定可以再次连接到同一个客户端吗? IIRC Socket 是不可能的,同样适用于 TcpClient

我会使用同一个客户端,只要它没有断开连接即可。

关于c# - 使用相同的 tcpclient 进行读/写并保持事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9515527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com