0

我在 stackoverflow 上阅读了很多关于 TcpClient 和多线程的内容,但我认为我没有找到明确的答案。

我有一个具有 3 个相同线程的应用程序。(在每个线程对象上调用相同的方法)

每个线程都创建自己的(本地)TcpClient 实例并打开到其服务器的 tcp 连接(不同的 IP 地址)。

线程应该只在不同的服务器上做同样的事情。3 台服务器机器运行相同的服务器软件。

现在 3 个线程“同时”启动服务器请求。

TcpClient 对象是否在每个线程上完全隔离?或者可能是底层流被不情愿地共享?

我感觉有时一个线程会获取不是来自“他的”服务器的数据。例如,所有线程都在轮询“就绪”标志。只有服务器 1 准备好并设置了标志,但线程 1 和线程 2 看到了设置的标志。

很有可能我做错了。但是肯定知道以这种方式在 TcpClient 对象上进行通信是安全的会有所帮助。

非常感谢您的任何建议,拉尔夫

PS:是的,我目前正在阅读有关 C# 8 中的多线程的书籍和文档-))

4

2 回答 2

1

如果TcpClient实例是独立的,那么它们将不会共享任何状态 - 您可以根据TcpClient需要使用任意数量的实例。如果数据在线程之间流失,我只能假设它在您自己的代码中。在这里混淆的一个常见原因是捕获的变量(来自 lambda / anon-method 的任何东西),在 C# 5 之前,这些变量可以以不经意的审阅者可能无法预料的方式共享。没有更多信息,我们不能说更多,但不:它们不应该相互干扰。

于 2012-10-26T11:18:26.687 回答
0

服务器将响应发回的端口可能有问题。Afaik 源端口是根据向服务器发送请求的程序自动确定的。也许每个威胁之间的端口确定没有区别,所以三个同时运行的威胁在同一个端口上收到了一个答案......但这只是我的猜测我不太喜欢 TCP 的东西

于 2012-10-26T12:03:55.750 回答