使用环境:VS2010 C#
做东西的时候碰到一个问题:
在后台中,创建了一个监听线程,用来监听是否有连接到监听地址的请求,如果有,则加入监听套接字集中;(这样的话,一个线程就可以接收N个套接字的信息)
创建了一个接收线程,对监听套接字集中的套接字进行消息接收,并将该消息显示出来;
其中,监听套接字集中有与服务器连接的套接字srvCommSock
出错状况:
类似下图所示
即,后台只收到了连接请求,但是却接收不到消息;
发送端则显示成功发送了消息,使用的是TCP/IP协议,所以是安全的;
但是消息跑哪儿了呢?
分析原因:
刚开始的时候毫无头绪,后来请教了下高手,说可能说线程A创建的套接字在线程B中可能访问不了(之后验证是可以的)
而且单步执行的时候,发现确实是有问题的。新加进来的套接字属性Socket.Connected为false(后来发现该属性不能作为套接字是否连接的依据,详细见文章Socket.Connected不能在调试时作为套接字是否连接的判断依据)
为了验证,做了一个简单的测试程序
测试代码如下:
监听线程代码:
private void _lstnThreadProc()
{
//for check
Console.WriteLine("_lstnThreadProc线程开始执行,监听其他用户的连接请求");
//开始监听
try
{
while (true)
{