POLL LOCK问题。
//如果有消息通知时,才查询数据库
while (!backgroundWorkerForEvent.CancellationPending)
{
byte[] arrMsgRec = new byte[100];
// 将接受到的数据存入到输入 arrMsgRec中;
int length = -1;
try
{
lock (DoNetWork.lockObj)
{
if (DoNetWork.sockClient.Poll(1000, SelectMode.SelectRead))
{
length = DoNetWork.sockClient.Receive(arrMsgRec); // 接
}
else
{
...
}
}
}
}
现在的问题是,在未知的情况下,TCP 接收不到信息(其它工具检测是有信息接收的)
其它线程里的DoNetWork.SendMsg还可以继续发送信息
WIRESHARK里显示KEEPALIVE是保持的
1.因为是在未知的情况下才发生的,不知该如何做情景再现。有什么办法?
2.这个问题的原因是在哪里。POLL? LOCK?
[解决办法]
你这线程是同步的,还lock了一次操作.可能是LOCK时间太长,造成了意外,消息被技弃
对于一对多的情况,最好采用异步接收处理,每次接收不会相互影响
[解决办法]
TCP通信阿
你这代码不全,错误描述不清。
多少客户端?一个连不上,还是多个? 有没有重连? 错误信息?