我在stackoverflow上阅读了很多关于TcpClient和多线程的内容,但我认为我没有找到明确的答案。
我有一个包含3个相同线程的应用程序。 (在每个线程对象上调用相同的方法)
每个线程都创建自己的(本地)TcpClient实例,并打开与其服务器的tcp连接(不同的IP地址)。
线程应该只在不同的服务器上执行相同的操作。 3台服务器机器运行相同的服务器软件。
现在3个线程同时启动服务器请求。
每个线程上的TcpClient对象是否完全隔离? 或者可能是基础流不愿意共享?
我感觉有时线程获取的数据不是来自'他'的服务器。 对于examlpe,所有线程都在轮询“就绪”标志。 只有服务器1准备好并设置了标志,但是线程1和线程2看到了标志集。
我很有可能做错了。 但这肯定有助于确保以这种方式在TcpClient对象上进行通信是安全的。
非常感谢任何建议, 拉尔夫
PS:是的,我目前正在阅读有关C#8多线程的书籍和文档 - ))
答案 0 :(得分:1)
如果TcpClient
实例是独立的,那么它们将不会共享任何状态 - 您可以根据需要使用尽可能多的TcpClient
个实例。如果数据在线程之间徘徊,我只能假设它在你自己的代码中。这里混淆的一个常见原因是捕获的变量(来自lambda / anon方法的任何东西),在C#5之前可以以临时审阅者可能没有预料到的方式共享。没有更多的信息,我们不能多说,但不是:他们不应该互相干涉。
答案 1 :(得分:0)
服务器向其发送响应的端口可能存在问题。 Afaik源端口是自动确定的,具体取决于向服务器发送请求的程序。也许端口确定在每个威胁之间没有差异,因此三个同时运行的威胁在同一个端口上回复了一个答案......但这只是我的猜测我不是很喜欢TCP-stuff