各位老大,我的這個函數那裏不對了啊?為什麽會不正確呢? |
尚未結案
|
DogHub
一般會員 發表:4 回覆:3 積分:1 註冊:2005-03-22 發送簡訊給我 |
TcpConnection2,这个在连接不通的情况下要延时20多秒(另外一个TcpConnection就是对此改进:可以自定义延时时间,但是我在多线程里面调用这个改进后的TcpConnection,得出的结果却没有TcpConnection2准确,
50個綫程連續調用 TcpConnection 掃描不同的ip(從192.168.1.1到192.168.1.255地時候,192.168.1.255:86 的結果是錯誤的(實際上是通的,可結果是不通 result為0),從192.168.1.255到192.168.1.1的結果是正確的,192.168.1.255:86是可以連接上的,從192.168.1.1開始掃描到1.255的時候就不行了,暈阿)
) function TcpConnection2(_Host:String;_Port:Integer):integer;
var i:integer;
sin:sockaddr_in;
mint :integer ;
begin
sin.sin_family:=AF_INET;
sin.sin_port:=htons(_Port);
i:=inet_addr(PChar(_Host));
sin.sin_addr.S_addr:=i;
mint := 0;
try
mint := socket(PF_INET,SOCK_STREAM,0);
if Connect(mint,sin,sizeof(sin))=SOCKET_ERROR then
Result := 0
else
Result :=1 ;
finally
CloseSocket(mint);
end;
end; function TcpConnection(_Host:String;_Port:Integer;_TimeOut: integer):integer;
var i:integer;
sin:sockaddr_in;
mint :integer ;
fs: TFDSet;
timeout: timeval;
ulb: integer;
RC:integer;
begin
sin.sin_family:=AF_INET;
sin.sin_port:=htons(_Port);
i:=inet_addr(PChar(_Host));
sin.sin_addr.S_addr:=i;
mint := 0;
FD_ZERO(fs); try
mint := socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
FD_SET(mint,fs);
timeout.tv_sec := _TimeOut;//连接超时
//延时_TimeOut 為 10秒 这里的10是秒吗?
//long tv_sec; /*秒*/ long tv_usec; /*微秒*/
timeout.tv_usec := 500;
ulb := 1;
ioctlsocket(mint,FIONBIO,ulb);
if Connect(mint,sin,sizeof(sin))=SOCKET_ERROR then
begin//
if (WSAGetLastError() = WSAEWOULDBLOCK) then
begin
FD_ZERO(fs);
FD_SET(mint,fs);
RC := select(0,nil,@fs,nil,@TimeOut);
end;
if RC = 0 then
Result := 0
else
Result := 1;
end// 返回的Result 有问题???????
else
Result := 1;
finally
ulb := 0;
ioctlsocket(mint,FIONBIO,ulb);
CloseSocket(mint);
end;
end; 發表人 - doghub 於 2005/06/10 16:58:03
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
DogHub
一般會員 發表:4 回覆:3 積分:1 註冊:2005-03-22 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |