【请教】socket服务器多线程接收客户端请求后,连接自己关闭
我写了一个服务器程序,自己写了一个简单的线程池,接收客户端的socket请求,来一个请求,拿出一个空闲线程处理
当常驻线程数为10,同一时间最大连接数为8左右时,客户端会显示连接服务器失败,就好像服务器端关闭了监听一样,请问这是怎么回事???
服务器采用WSAAsyncSelect模型:
1,首先定义一个消息标示常量:const WM_SOCKET = WM_USER + 55;
2,再在主Form的private域添加一个处理此消息的函数声明:
private
procedure WMSocket(var Msg: TMessage); message WM_SOCKET;
3,sock := socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
addr.sin_family := AF_INET;
addr.sin_port := htons(5678);
addr.sin_addr.S_addr := htonl(INADDR_ANY);
bind( m_sock, @addr, sizeof(SOCKADDR) );
WSAAsyncSelect( m_sock, Handle, WM_SOCKET, FD_ACCEPT or FD_CLOSE );
listen(。。。);
4,procedure TfmMain.WMSocket(var Msg: TMessage);
//Msg的WParam是产生了网络事件的socket句柄,LParam则包含了事件类型
case WSAGetSelectEvent( Msg.LParam ) of
FD_ACCEPT :查找空闲线程处理。。。
[解决办法]
服务器端设置了最大连接数吧,
[解决办法]
线程池你可能没处理好, 实在要用你就用现成的, 大牛写的
dxpack, 你自己可以先学一下别人怎么写的.
先模仿, 在创新.