具体描述:
用线程池开多个线程对不同ip和端口发送指令(线程池的最大线程数量>所有套ip端口的数量)
foreach
{
ThreadPool.RegisterWaitForSingleObject(new AutoResetEvent(false), new WaitOrTimerCallback(t.CreatDeviceAndAddMachines), i, NetDeviceHelper.RequestDelauMs, true);
}
具体发送指令的方法
异步方法
tcpclient.BeginConnect(serverip, serverport,
new AsyncCallback(CallBackMethod), tcpclient);
回调方法
TcpClient tcpclient = asyncresult.AsyncState as TcpClient;
if (tcpclient.Client != null)
{
hrow new TimeoutException("IsConnectionFailed");
}
发现:
比如我对192.168.40.23:10011能正常发送指令并接收数据,
当我的集合数量比较小的时候,比如10个,192.168.40.23(10001-10011),那么当轮训到这个端口的时候,是可以正常发送接收数据的,
但是当集合数量比较多的时候,比如100个192.168.40.23(10001-10111),那么当轮训到这个端口的时候,tcpclient.Client ==null,一直发IsConnectionFailed的异常
现在问题差不多解决了,但是只是我碰巧改的,原理并不清楚,希望高人来解答
当集合多的时候,socket报的错误有三种,10022,10056和socket为null,由于我用的是串口服务器,串口设备通过这个串口服务器变成网络设备,可能性能不高。
我在线程池注册委托的时候加了一个延迟50ms,两个委托之间相差50ms,然后读到数据的几率就大大增大了,不明所以,只能说是解决了问题