★★★着急,socket服务端怎样响应多个客户端的连接?★★★

Summer1314 2004-09-10 03:50:36
我用TCP方式建立一个socket服务端程序,部分代码如下:
listen(sock, 2);
accept(...);
就是说服务端允许两个客户端连接,调用accept函数是线程被阻塞,等待客户端连接,假如有客户端A和B,
问题:
如果A先连接,accept函数会立即返回吗?
然后如果B也连接,是否要重新调用一次accept函数?

谢谢指教!
...全文
317 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
DentistryDoctor 2004-09-11
  • 打赏
  • 举报
回复
=>
listen(s,SOMAXCONN);
DentistryDoctor 2004-09-11
  • 打赏
  • 举报
回复
accept始终是阻塞的。如果有多个客户连接,WINSOCK会自动为你建立一个队列等待连接,队列的长度由你的listen函数的第二个参数指定。好像这个值最大是5.
Micro_Sheng 2004-09-11
  • 打赏
  • 举报
回复
如果要频繁的响应客户的连接与断开,请用IOCP模型
sharkhuang 2004-09-11
  • 打赏
  • 举报
回复
同意 Hellboy(int argc, char* argv[]) .你的确把2理解错了.
oyljerry 2004-09-11
  • 打赏
  • 举报
回复
用select模型,这样你的accept就不需要多次调用了
hellopine 2004-09-11
  • 打赏
  • 举报
回复
用异步消息处理模型:

WSAAsyncSelect(m_clientSocket,this->m_hWnd,WM_RECEIVE,FD_ACCEPT);

TCP UDP 都可以使用,我试过了!
Hellboy 2004-09-10
  • 打赏
  • 举报
回复
listen(sock, 2);的意思理解错了!

listen(sock,2)的意思是,如果在同一时间有3个客户端connect

其中的一个会被accept,另外一个被系统自动排队,最后一个将被拒绝.
等系统处理完第一个连接以后,第二个连接也会被接受,这时系统又能缓冲一个连接了.

如果两个连接都处理完了,系统会恢复到刚才的状态.(可以接受一个连接,缓冲一个,拒绝其他的)
所以最大连接数和listen没有任何联系,listen限制单位时间的同时连接数量.

kvls 2004-09-10
  • 打赏
  • 举报
回复
1、会返回,只要有连接请求即可。
2、看你的程序了,在你的程序中是否会再次调用accept是由您的程序来决定的。
Kudeet 2004-09-10
  • 打赏
  • 举报
回复
accept(.......)这个函数也是阻塞函数,只有客户端连接上来了才会返回,不然整个程序都停留在accept出现的地方阻塞着,一直等着有客户端连接上来accept返回后才继续执行下去
<windows网络编程> 第8章 I/O模型
Kudeet 2004-09-10
  • 打赏
  • 举报
回复
用SELECT模型可以吧!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧