首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

【请问】socket服务器多线程接收客户端请求后,连接自己关闭

2012-04-04 
【请教】socket服务器多线程接收客户端请求后,连接自己关闭我写了一个服务器程序,自己写了一个简单的线程池,

【请教】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, 你自己可以先学一下别人怎么写的.

先模仿, 在创新.

热点排行