Socket连接问题? (50分)

  • 主题发起人 主题发起人 jxhdy2001
  • 开始时间 开始时间
J

jxhdy2001

Unregistered / Unconfirmed
GUEST, unregistred user!
当客户端用户达到一定数量时,SocketServer经常会CPU利用率百分之百,也经常会没有响应,我想能否通过使用定时去检测每一个TCP连接状态,根据状态来结束,一些客户端的连接,
帮忙解释TCP连接的12种状态,我在网上找的资料都不全
MIB_TCP_STATE_CLOSED = 1;
{$EXTERNALSYM MIB_TCP_STATE_CLOSED}
MIB_TCP_STATE_LISTEN = 2;
{$EXTERNALSYM MIB_TCP_STATE_LISTEN}
MIB_TCP_STATE_SYN_SENT = 3;
{$EXTERNALSYM MIB_TCP_STATE_SYN_SENT}
MIB_TCP_STATE_SYN_RCVD = 4;
{$EXTERNALSYM MIB_TCP_STATE_SYN_RCVD}
MIB_TCP_STATE_ESTAB = 5;
{$EXTERNALSYM MIB_TCP_STATE_ESTAB}
MIB_TCP_STATE_FIN_WAIT1 = 6;
{$EXTERNALSYM MIB_TCP_STATE_FIN_WAIT1}
MIB_TCP_STATE_FIN_WAIT2 = 7;
{$EXTERNALSYM MIB_TCP_STATE_FIN_WAIT2}
MIB_TCP_STATE_CLOSE_WAIT = 8;
{$EXTERNALSYM MIB_TCP_STATE_CLOSE_WAIT}
MIB_TCP_STATE_CLOSING = 9;
{$EXTERNALSYM MIB_TCP_STATE_CLOSING}
MIB_TCP_STATE_LAST_ACK = 10;
{$EXTERNALSYM MIB_TCP_STATE_LAST_ACK}
MIB_TCP_STATE_TIME_WAIT = 11;
{$EXTERNALSYM MIB_TCP_STATE_TIME_WAIT}
MIB_TCP_STATE_DELETE_TCB = 12;
{$EXTERNALSYM MIB_TCP_STATE_DELETE_TCB}
 
各位,不知道是我没描述清,还是因为这太简单了你们看不上。
我想在服务器端根据客户端连接状态来断开连接的。
不知道这种方法是否可行。
 
状态太多了,哪个记的那么全啊,TCP/IP详解3本还不错,其中第一本讲了很多这个方面的知识,买一本好好看看吧。
 
呵呵!谢谢张无忌的指点!
不过这会可没功能看书了,SocketServer老出问题,要么就没有响应,有时会出现有的端口连接不上,比如说:在SocketServer中开了个211端口,SocketServer中启动中会创建一个TserverSocket一直监听211端口,但最近出现TserverSocket不监听211端口的问题?具体什么状态,没条件查看
 
咦,
楼主得到连接以后还Create个TServerSocket呀???????
太高档了吧,
TSocketEvent = (seLookup, seConnecting, seConnect, seDisconnect, seListen,seAccept, seWrite, seRead);
正常来说是只有8个,我看过的资料都是这样的,
>> 具体什么状态,没条件查
如果想看到状态的话,自己写一个基于 TServerSocket的组件,重载其 Event函数就OK。
试试看咯,有问题发贴,呵呵~~~~~~~~~~~~~~~~
 
To Netsoft:
呵呵!可能是我没表达清楚!
在查看SocketServer源码中,SocketServer启动后,一个端口对应了一个TserverSocket在监听,但最近经常会出现客户端无法连接SocketServer,所以我想应该是监听端口的ServerSocket出了问题,但不知道是什么原因出现的?
 
连接的客户端多吗?达到多少个?
 
二三百个吧!
不知算不算超负荷哦!
 
楼方用什么 Socket 控件?
 
socket 当60个客户同时操作时,回造成内存泄露,这是BORLAND的官方验证,
其使用饱和量也就48个,(同时操作)
socket有自动监测客户端的功能:在3-6分钟客户端没有操作时,回段开其连接。
 
To QSmile: 偶没写代码呢!
只是在找SocketServer为什么会出现那现像?
To erice: 我们一直都是那么多用户,但感觉局域网内还操作还是蛮顺畅的,在拔号就不太好了,经常要等待.
 
to erice:
不会把,SOCKET的并发处理数在相同I/O模式下是和带宽是成比例的,一般处理的好
700~800个用户应该是没问题的(100m/6k/s)
 
不会啊。。。我的经常是客户端已经退出了。。但是在Socket中却留着客户端的IP。。不知道怎么回事啊。。
 
你是不是在用做多层时的socketconnection?
如果是这样
1、把客户端Socketconnection的supportcallback设为false,这涉及socket的工作方式,区别非常大。
2、scktsrvr.exe的timeout是可以指定的。
如果你是直接用socket编程,那么服务器端是无法知道客户端意外断线的情况的。只能用变
通的方法解决,像scktsrvr那样客户端在指定时间没有数据发送就认为断线。
 
多人接受答案了。
 
后退
顶部