//连接,发送和接收时间都设为2秒
SctTimeOut := 2000
//设置接收数据通信超时
setsockopt(hSock,SOL_SOCKET,SO_RCVTIMEO,@SctTimeOut,SizeOf(Integer))
//设置发送数据通信超时
setsockopt(hSock,SOL_SOCKET,SO_SNDTIMEO,@SctTimeOut,SizeOf(Integer))
//首先,设置通讯为非阻塞模式
dwArg := 1
RecvLen := ioctlsocket(hSock,FIONBIO,dwArg)
//其次,连接服务器
ZeroMemory(@addr, sizeof(addr))
addr.sin_family := AF_INET
addr.sin_addr.S_addr := inet_addr(pchar(SvrIP))
addr.sin_port := htons(Strtoint(SvrPort))
RecvLen := 0
RecvLen := connect(hSock, addr, sizeof(addr))
//再次,设置连接超时时间为2秒
tmOut.tv_sec := 2
tmOut.tv_usec := 0
FD_ZERO(recvSet)
FD_SET(hSock, recvSet)
RecvLen := select(0, @recvSet, @recvSet, nil, @tmOut)
//连接失败,报错误信息
if (RecvLen = 0) or (RecvLen = SOCKET_ERROR) then
begin
ErrMsg := '连接服务器失败!'
exit
end
//最后,设置通讯为阻塞模式
dwArg := 0
RecvLen := ioctlsocket(hSock,FIONBIO,dwArg)
//end modify
TCP超时总共分为3类,即连接超时,读超时,写超时,这三种超时设置办法如下:1、连接超时:超时时间系统是有最大限制的,如果想要自己设置超时时间,可以采用alarm函数或者使用select函数,监听套接字是否有读或写性质的变化;
2、读写超时设置要用到函数setsockopt(),这个比较简单,直接在客户端设置一下就可以了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)