行
行到水穷处
Unregistered / Unconfirmed
GUEST, unregistred user!
TcpConnection 在不能連通的情況下要延遲20秒之多,因此另外改進為下一個TCPConnection2<br><br>50個綫程連續調用 TcpConnection 掃描不同的ip(從192.168.1.1到192.168.1.255升序地時候,192.168.1.255:86 的結果是錯誤的,而反过来降序: 從192.168.1.255到192.168.1.1 扫描的結果是正確的,意味着,开始扫描的结果是正确的,越靠后越不对。<br>192.168.1.255:86是可以連接上的,從 192.168.1.1開始掃描到1.255的時候就不行了,暈阿<br><br>function TcpConnection(_Host:String;_Port:Integer):integer;<br>var i:integer;<br> sin:sockaddr_in;<br> mint :integer ;<br>begin<br> sin.sin_family:=AF_INET;<br> sin.sin_port:=htons(_Port);<br> i:=inet_addr(PChar(_Host));<br> sin.sin_addr.S_addr:=i;<br> mint := 0;<br> try<br> mint := socket(PF_INET,SOCK_STREAM,0);<br> if Connect(mint,sin,sizeof(sin))=SOCKET_ERROR then<br>//上面這句在不能連通的情況下要延遲20秒之多,因此另外改進為下一個TCPConnection2<br> Result := 0<br> else<br> Result :=1 ;<br> finally<br> CloseSocket(mint);<br> end;<br>end;<br>//-----------------改進后的TcpConnection2---------------<br>function TcpConnection2(_Host:String;_Port:Integer;_TimeOut: integer):integer;<br>var i:integer;<br> sin:sockaddr_in;<br> mint :integer ;<br> fs: TFDSet;<br> timeout: timeval;<br> ulb: integer;<br> RC:integer;<br>begin<br> sin.sin_family:=AF_INET;<br> sin.sin_port:=htons(_Port);<br> i:=inet_addr(PChar(_Host));<br> sin.sin_addr.S_addr:=i;<br> mint := 0;<br> FD_ZERO(fs);<br> try<br> mint := socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);<br> FD_SET(mint,fs);<br> timeout.tv_sec := _TimeOut;//连接超时<br> //延时_TimeOut 為 10秒 <br> timeout.tv_usec := 500;<br> ulb := 1;<br> ioctlsocket(mint,FIONBIO,ulb);<br> if Connect(mint,sin,sizeof(sin))=SOCKET_ERROR then<br> begin//<br> if (WSAGetLastError() = WSAEWOULDBLOCK) then<br> begin<br> FD_ZERO(fs);<br> FD_SET(mint,fs);<br> RC := select(0,nil,@fs,nil,@TimeOut);<br> end;<br> if RC = 0 then<br> Result := 0<br> else<br> Result := 1;<br> end// 返回的Result 有问题???????<br> else<br> Result := 1;<br> finally<br> ulb := 0;<br> ioctlsocket(mint,FIONBIO,ulb);<br> CloseSocket(mint);<br> end;<br>end;