关于Socket连接(50分)

  • 主题发起人 主题发起人 kenbe
  • 开始时间 开始时间
K

kenbe

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Socket的客户端连接的时候,当Socket的服务器端不存在的时候,
打开Socket.open时,出来一个报错,
我的想法是先测试一下服务器是否存再连接,
大家有没有更好的办法?
如果用我的办法的就要有什么办法才可以测试呢?
问题太菜,谢谢各位,呵呵~~~
 
客户端在调用connect时,如果服务器没有监听,那么会产生WSAECONNREFUSED错误,如果网络故障而导致连接失败,会发生WSAETIMEDOUT错误。
 
我都是用try,在except里面写出错的处理代码
 
To ego
我怎么才可以取到它的返回数据呢?
有没有一个先测试如果服务器在或网络通再连的控件呢?
 
>>有没有一个先测试如果服务器在或网络通再连的控件呢?
你可以在OnError事件中判断是否连接错误,然后延迟一断时间后再connect。

如果你是用TClientSocket控件,那么可以在OnError事件里处理错误,只要设置ErrorCode:=0,即可屏蔽错误信息。
如果想针对某一错误进行处理,可用下面的方法进行判断:
case ErrorCode of
WSAECONNREFUSED: {处理代码}
WSAETIMEDOUT: {处理代码}
......
end;
ErrorCode:=0

如果是用API,下面的方法也可以处理:
if connect(s, ServerAddr, SizeOf(ServerAddr)) = socket_error then
raise exception.Create(IntToStr(wsaGetLastError));
 
用TRY EXCEPT就可以了呀
 
ego的方法在98下会导致系统资源不足错误
 
呵呵,忘了要CloseSocket,释放资源。
 
我客户端用的是TClientSocket
服务器用的是TServerSocket
客户端运行后检测网络,
如果服务器在运行的则传送数据,
否则不作如下操作。
 
OK现在发分!!!
 
后退
顶部