全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1245
推到 Plurk!
推到 Facebook!

各位老大,我的這個函數那裏不對了啊?為什麽會不正確呢?

尚未結案
DogHub
一般會員


發表:4
回覆:3
積分:1
註冊:2005-03-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-10 16:46:14 IP:218.94.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-11 10:09:52 IP:203.204.xxx.xxx 未訂閱
程式碼上下請加上[ code ] 和 [ / code ] ([ 和 code 間沒有空白 ) ********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
DogHub
一般會員


發表:4
回覆:3
積分:1
註冊:2005-03-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-13 08:46:44 IP:218.94.xxx.xxx 未訂閱
To pcboy2 : [ code] 已經加上,謝謝提醒。 但是問題應該怎樣解決? 能否提供一個可自定義延時時間的(winsock)TCPConnection測試函數? 感激不盡!
系統時間:2024-05-08 10:58:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!