当前位置: 技术问答>linux和unix
SOCKET同时接收客户端连接问题
来源: 互联网 发布时间:2016-12-22
本文导语: 服务端程序和典型的网络都一样的调用,短连接 接收数据是单进程,接到数据后是给多线程去做处理了(把连接句柄也给线程了),处理完后在线程里把句柄关掉了 .... listen(iSocketID, m_iMaxClientNum) //m_iMaxClientNum = 1,等于1...
服务端程序和典型的网络都一样的调用,短连接
接收数据是单进程,接到数据后是给多线程去做处理了(把连接句柄也给线程了),处理完后在线程里把句柄关掉了
....
listen(iSocketID, m_iMaxClientNum) //m_iMaxClientNum = 1,等于1有问题吗,我改成2也是一样的不行
while(true)
{
iSocket = accept()
select()
把消息和iSocket给线程去处理了
...
}
......
线程里
fun(iSocket)
{
...
close(iSocket) //这里会不会出现关不掉,关不及时的情况
...
}
现在比如有两个客户端工具A,B, 上面有连接和发送消息按键,
如果点击A上面的连接,然后再点击B上面的连接,然后点击A上面的发送消息,这里我看日志是收到了
,再点击B上面的发送消息,然后就收不到了(排除客户端发送不成功原因,因为是工具,不可能数据发不成功的)
,这是为什么呢?
接收数据是单进程,接到数据后是给多线程去做处理了(把连接句柄也给线程了),处理完后在线程里把句柄关掉了
....
listen(iSocketID, m_iMaxClientNum) //m_iMaxClientNum = 1,等于1有问题吗,我改成2也是一样的不行
while(true)
{
iSocket = accept()
select()
把消息和iSocket给线程去处理了
...
}
......
线程里
fun(iSocket)
{
...
close(iSocket) //这里会不会出现关不掉,关不及时的情况
...
}
现在比如有两个客户端工具A,B, 上面有连接和发送消息按键,
如果点击A上面的连接,然后再点击B上面的连接,然后点击A上面的发送消息,这里我看日志是收到了
,再点击B上面的发送消息,然后就收不到了(排除客户端发送不成功原因,因为是工具,不可能数据发不成功的)
,这是为什么呢?
|
顶一个
|
你的iSocket是临界资源,被多个客户端线程竞争了,只会被一个socket连接所占用。
试一下
注意释放。
试一下
SOCKET *pSock = new SOCKET;
*pSock = accept();
select();
注意释放。
|
m_iMaxClientNum 改大点,然后isocket为多个线程使用了