大家好:
我对listen函数不是很理解。一般都会把listen函数放到while循环外面,例如:
..........
Socket server;
server.Bind(iep);
server.listen(20);
while(true)
{
Socket client = server.Accecpt(); ..................
} 通过无限循环接收客户的链接,然后进行通信。我不理解的是listen()就在函数启动时执行一次,当执行到while循环listen函数已经执行完毕,也就是监听函数无效了,当有其他客户端链接进来的时候,不久无法监听当前是否有客户链接信息吗?
带着上面的疑问,我把listen函数放到while循环里面,如下:
server.Bind(iep);
Console.WriteLine("wait for clients connecting");
while (true)
{ //
server.Listen(20);
Socket client = server.Accept();
ClientThread newclient = new ClientThread(client); Thread newthread = new Thread(new ThreadStart(newclient.ClientService));
newthread.Start();
}这个函数执行结果和上面函数代码执行效果是一样,不知道listen函数实现机制是什么样的,难道这个函数像一个线程一样,一时处于运行状体,知道关闭服务器吗? 我的问题可能有些好笑,但是还请各位高手给予解答。非常感谢
我对listen函数不是很理解。一般都会把listen函数放到while循环外面,例如:
..........
Socket server;
server.Bind(iep);
server.listen(20);
while(true)
{
Socket client = server.Accecpt(); ..................
} 通过无限循环接收客户的链接,然后进行通信。我不理解的是listen()就在函数启动时执行一次,当执行到while循环listen函数已经执行完毕,也就是监听函数无效了,当有其他客户端链接进来的时候,不久无法监听当前是否有客户链接信息吗?
带着上面的疑问,我把listen函数放到while循环里面,如下:
server.Bind(iep);
Console.WriteLine("wait for clients connecting");
while (true)
{ //
server.Listen(20);
Socket client = server.Accept();
ClientThread newclient = new ClientThread(client); Thread newthread = new Thread(new ThreadStart(newclient.ClientService));
newthread.Start();
}这个函数执行结果和上面函数代码执行效果是一样,不知道listen函数实现机制是什么样的,难道这个函数像一个线程一样,一时处于运行状体,知道关闭服务器吗? 我的问题可能有些好笑,但是还请各位高手给予解答。非常感谢
-----------------------------------
错误。Listen只是将Socket置为监听状态,并不负责实际的建立连接工作。只有在监听状态下,Socket才能接受客户端发起的连接。而Accept是在有客户端发起连接的时候,接受连接请求,双方正式建立连接。