【发布时间】:2013-12-12 09:22:43
【问题描述】:
我使用 MSDN 异步示例编写了一个异步套接字客户端和服务器类,3000 GB 数据在单客户端和单数据发送线程测试下全部成功传输。
但是当我使用 for 循环创建多个线程向服务器发送数据时,我发现在客户端,为 BeginConnectCallback 创建的线程始终具有相同的 id。
并且所有 ManualResetEvent 机制都失败了,当第一个线程调用 ManualResetEvent.Set( ) 时,所有线程都被激活。 (每个线程都有自己的 ManualResetEvent 对象)
这是我的客户端日志示例:(问题是为什么线程 7 总是执行 EndConnect 工作?)
15:33:05.100 数据发送线程 1,BeginConnect 到服务器 192.168.1.100 端口 6000
15:33:05.100 数据发送线程 2,BeginConnect 到服务器 192.168.1.100 端口 6000
15:33:05.100 数据发送线程 3,开始连接到服务器 192.168.1.100 端口 6000
15:33:05.102 ConnectionCallback 线程 7 执行 EndConnect 和 mreConnectDone.Set( );
15:33:05.102 ConnectionCallback 线程 7 执行 EndConnect 和 mreConnectDone.Set( );
15:33:05.121 数据发送线程 1, 通过端口 2650 连接,套接字句柄:8234
15:33:05.145 ConnectionCallback 线程 7 执行 EndConnect 和 mreConnectDone.Set( );
15:33:05.170 数据发送线程 2,通过端口 2651 连接, 套接字句柄:8235
15:33:05.177 数据发送线程 3,已连接 通过端口 2652,套接字句柄:8236
如果您对此感兴趣,我可以将源代码邮寄给您。 我的邮件是 thlin.harcon@gmail.com
【问题讨论】:
-
不要邮寄源代码 - 发布您所指的相关部分。
标签: c# multithreading sockets