我的程序有一个线程,是用来不停的连接服务器,开始的时候连几十次没问题,不过开久了,可能连了几百,几千次后吧,就停止不动了,我想可能是阻塞的原因,程序就死在那里不动了,我是用下面的函数连接,请问怎样才能解决连接时阻塞问题?function Connect_Server(host:string;Port:integer):integer;
var TimeOut,i:integer;
p:^LongInt;
phe:pHostEnt;
sin:sockaddr_in;
begin
sin.sin_family:=AF_INET;
sin.sin_port:=htons(Port);
phe:=gethostbyname(pchar(host));
if phe<>nil then
begin
p:=Pointer(phe^.h_addr_list^);
sin.sin_addr.s_addr:=p^;
end
else begin
i:=inet_addr(PChar(Host));
if i<> -1 then sin.sin_addr.S_addr:=i
end;
Result:=socket(PF_INET,SOCK_STREAM,0);////////下面解决阻塞的处理不起作用///////
TimeOut := 60000;
setsockopt(Result, SOL_SOCKET, SO_RCVTIMEO, pchar(TimeOut), sizeof(TimeOut));
/////////////////////////////////////
if (Result=INVALID_SOCKET) then Exit;
if Connect(Result,sin,sizeof(sin))=SOCKET_ERROR then
begin
form3.TeThemeListBox1.Items.Add('用户连接服务器错误!');
Exit;
end;
end;
var TimeOut,i:integer;
p:^LongInt;
phe:pHostEnt;
sin:sockaddr_in;
begin
sin.sin_family:=AF_INET;
sin.sin_port:=htons(Port);
phe:=gethostbyname(pchar(host));
if phe<>nil then
begin
p:=Pointer(phe^.h_addr_list^);
sin.sin_addr.s_addr:=p^;
end
else begin
i:=inet_addr(PChar(Host));
if i<> -1 then sin.sin_addr.S_addr:=i
end;
Result:=socket(PF_INET,SOCK_STREAM,0);////////下面解决阻塞的处理不起作用///////
TimeOut := 60000;
setsockopt(Result, SOL_SOCKET, SO_RCVTIMEO, pchar(TimeOut), sizeof(TimeOut));
/////////////////////////////////////
if (Result=INVALID_SOCKET) then Exit;
if Connect(Result,sin,sizeof(sin))=SOCKET_ERROR then
begin
form3.TeThemeListBox1.Items.Add('用户连接服务器错误!');
Exit;
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货