我在服务器端用server.socket的非阻塞式开了300个线程,客户端同样也是用的非阻塞式通讯。为什么当服务器连接到42个客户端的时候其它的客户端就不能连接

  • 主题发起人 主题发起人 wanxu
  • 开始时间 开始时间
W

wanxu

Unregistered / Unconfirmed
GUEST, unregistred user!
我在服务器端用server.socket的非阻塞式开了300个线程,客户端同样也是用的非阻塞式通讯。为什么当服务器连接到42个客户端的时候其它的客户端就不能连接到服务器?先来50再说! (50分)<br />我想至少server.socket能够链接200台机器没有问题吧?服务器连接的客户端在84个的时候
,其它后面链接的客户端就不能连接到服务器。我还能在该机器打开两个delphi5。这说明
系统开销还没有完!问题究竟在什么地方?是不是我还有什么地方没有想到?能解决问题
再加分!
 
应该是阻塞式线程吧[?]
 
iamcaca:
对!你有解决该问题的方法吗?
 
错误提示是什么?
 
如果我已经解决了这个问题可不可以把分收回?
 
这是DELPHI自带的SOCKET的BUG,建议你换控件,用INDY或是ICS的会好用一点。但是要做
服务器程序,还是用JAVA的比较好
 
疾风之猫:
你好!我用的是Delphi自带的控件,那delphi的sokcet究竟能链接多少个客户
端?你知道吗?这是由什么造成的?能不能不换控件,仅仅作一点改进!造成这个
问题的原因是客户端还是服务器端的socket?
你说用INDY或是ICS的或者用JAVA的比较好,我没有用过,他们分别
能够链接多少客户端?
 
还有高见吗?



 
好象没有这问题吧。我用ServerSocket,ClientSocket,60个连接也没出现问题.
 
原来我也遇到过。我是有一个服务控制端程序(server),多个客户端(client)。
在Win98下阻塞Socket线程最多开六七十个,在Win2k下几百个没问题。当然你的client
不能非常频繁的访问server,但你也可以在server端建一个消息队列了。让一个线程
处理所有的消息。
 
lynu:
你试过链接84个以上的客户端吗?我现在的服务器链接到84个客户端的时候,后来的
客户端就链接不到服务器了!有时间的话你试试看!!!!
 
你用什么平台?Win2k还是Win98?我建议你用阻塞的线程方式,这样一开始麻烦点,但是
控制起来很方便的。
 
IdeasWar:
你好!
不知道你做过单线程的Socket服务器?
如果为每个连接都分配一个线程的话,连接多了以后,系统开销太大了。
 
IdeasWare:
我用的平台是win98。用的是stNonBlocking方式!但是只能链接到84台客户端机器!
这是为什么????
 
在98下,Delphi的Socket控件只能创建那么多Client Socket对接,这是有限制的。
就是在阻塞方式下的Socket线程也超过不了那么多。不过线程只是一队命令队列,
不会占太多的资源。不过你的服务器完全可以用Win2k呀!这样几百个Socket就没问题了。
这我曾经试过,不过代码都给那个吝啬的老板扣留了。
 
IdeasWare:
你好!
我把服务器变成win2k后程序的其它地方还要作那些变动?我是在win98+delphi5的环
境下写的程序!在win2k下用stNonBlocking方式还能链接几百台机器吗?
 
我知道阻塞方式下可以,非阻塞模式在很多Socket情况下不能保证不丢包的.
 
IdeasWare:
在win2k下用stNonBlocking方式还能链接几百台机器吗?
谢谢!!!
 
我不能确保。因为我当时用的是阻塞方式。但从理论上说因该能吧。
 
后退
顶部