Socket连接限制问题
服务器一台,多个客户机,要求服务器对连接数有限制,
如服务器最大连接数为3个,当第4个客户要求连接,服务器通知客户机,连接数已满,
类似FTP限制连接功能,请问如何用socket编程实现,就急,谢谢。
问题点数:50、回复次数:12Top
1 楼Silva_Zhao(Silva)回复于 2002-07-18 19:49:51 得分 10
服务器端肯定是可以知道当前有多少个客户连接了自己.如果是TCP连接,你可以根据服务器端有几个ACCEPT是成功的来判断连接数;如果是UDP,不需要连接,这时可以根据RECVFROM接收到的数据来自什么地址,来选择是接收这个地址的数据还是通知它连接已满.Top
2 楼ljan(冰魂)回复于 2002-07-18 21:42:31 得分 0
我是使用tcp连接的,是在服务器端可以知道当前存在多少连接,
然后如何操作呢?
是服务器先接受当前这个连接,然后发一个连接已满确认包,让客户端关闭连接吗?
还是其他操作呢?Top
3 楼xuying()回复于 2002-07-18 22:12:02 得分 0
accept之后,检查目前的连接数,如果已经满了,就close这个socket。Top
4 楼Silva_Zhao(Silva)回复于 2002-07-18 22:19:56 得分 0
同意UPTop
5 楼ljan(冰魂)回复于 2002-07-19 12:47:53 得分 0
然后在客户端用recv,返回为0,就告诉客户,连接已满,是不是?Top
6 楼Silva_Zhao(Silva)回复于 2002-07-19 13:08:08 得分 0
应该可以。你也可以先ACCEPT之后发送一个通知给客户机,然后再关闭连接呀。Top
7 楼Silva_Zhao(Silva)回复于 2002-07-19 13:15:23 得分 0
应该可以。你也可以ACCEPT之后让服务器发送一个通知给客户端,告诉它连接已满,然后再关闭这个连接。Top
8 楼hohoo(hohoo)回复于 2002-07-19 16:12:51 得分 0
listen(sdListen,3);
第二个参数指定在请求队列中允许的最大请求数。如果客户连接数超过这个最大值,客户将收到一个连接被拒绝的错误指示(10061 Connection refused)。Top
9 楼ljan(冰魂)回复于 2002-07-19 21:16:00 得分 0
to hohoo,看样子你对listen函数不了解,我原先也是以为那样实现的,
但不行的,
我都把backlog,设置为1,但要求连接,照样成功。
Top
10 楼ljan(冰魂)回复于 2002-07-19 21:17:30 得分 0
To xuying,然后怎么办,是发确认包,还是照我那种recv返回0的方法,返回0的方法我已经实现,我想知道最好的方法...Top
11 楼xuying()回复于 2002-07-19 22:06:22 得分 40
你在一段调用closesocket()后,另一端会收到FD_CLOSE事件,也进行关闭操作就可以。Top
12 楼hohoo(hohoo)回复于 2002-07-22 13:51:30 得分 0
to ljan (冰魂)
sorry,我所回答是错误的,我错以为listen的第二个参数就是允许的最大客户连接数,而许多资料也是这么说的。
因为listen是个队列,正确的解释应该是同一时刻允许的最大连接请求数。
~~~~Top




