紧急求助,为什么TClientSocket在内网的部分机器上连接服务器会失败,而在外网上都是成功的?(200分)

  • 主题发起人 主题发起人 zj_uu
  • 开始时间 开始时间
Z

zj_uu

Unregistered / Unconfirmed
GUEST, unregistred user!
服务器程序用VC编写,在内网上运行
客户端程序用Delphi6编写,是一个Dll,外围程序调用Dll时,Dll中生成一个线程和TClientSocket,
结果在外网的机器上运行都是正常的,但是在部分内网的机器上运行时却发现TClientSocket连接服务器失败,
不过其实隔一会以后服务器都能收到连接信息,但这时客户端已经连接超时了
下面是部分代码

CurrentThread:=MyThread.Create(True);
with CurrentThread do
begin
FreeOnTerminate:=True;
Socket:=TClientSocket.Create(Application);
Socket.ClientType:=ctNonBlocking;
Socket.Host:=IP;
Socket.Port:=Port;
Socket.OnDisconnect:=SocketDisconnect;
Socket.OnError:=SocketError;
try
Socket.Active:=True;
except
Terminate;
Result:=ConnectFailed;
Exit;
end;
WaitCount:=0;
while (not Socket.Active) and (WaitCount<600) do
begin
Sleep(10);
Inc(WaitCount);
Application.ProcessMessages;
end;
if not Socket.Active then
begin
Terminate;
CurrentThread:=nil;
Result:=ConnectFailed;
Exit;
end;
 
没人知道么?
 
好象是有这个问题,对于不同网段的Winsock连接,经常会比同一网段要快,很抱歉,我也没有
很好的解决方案。建议你不妨跟踪进Source Code中,看具体的连接超时的那段代码。
 
TClientSocket的异步超时VCL没有设置,默认好象是20秒
不过这个值可以修改
FReceive:=2000;
bread:=setsockopt(ClientSocket1.handle,SOL_SOCKET,SO_RCVTIMEO,
@FReceive,sizeof(FReceive)
 
多人接受答案了。
 
后退
顶部