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

TServerSocket中的TCP/IP sync 與sync_ack

尚未結案
zre
一般會員


發表:1
回覆:4
積分:1
註冊:2005-05-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-07 19:35:14 IP:222.156.xxx.xxx 未訂閱
各位前輩好: 小弟寫了一個有TserverSocket元件的程式,期望的程式動作如下: (1)Client ---> Server(TServerSocket) (2)Server程式丟出message叫Client 做硬體test (3)Client做完動作,回傳test結果給Server (4)最後按下一個button做 ServerSocket->Close();ServerSocket->Open(); 原因在於,Client機器會用拔Power插頭的方式斷線,為避免發生async socket error故設計一個按鈕做降的動作!然後再接續(1)的動作 ==================================================================== 但現在問題在於,如果我的程式是第一次開啟執行的話,client端很快就連上server等我丟msg做test,也能成功回傳結果給我!最後再按下button以讓ServerSocket回到剛open的狀態 ; 這時Server程式(Server AP要一直開著)要等待第2台client連上來..這時就會發生要等個1分鐘的時間Client才連的上Server的socket,而不像第一台可以馬上連上!但如果每次都去關掉Server AP再開啟,都一定是馬上連上~~ 後來去查看封包的內容,發現等候很久的情況似乎是Client傳sync給我,但Server卻不是回傳正確的ack給它,導致無法連上! 但是疑惑的是.為什麼等了近一分鐘卻又連上了? 有人跟我說試著去清空Server socket的cache,以免回傳錯的ack,可是我查看ServerSocket可用的func,似乎沒有關於cache的func可用,如果哪位高手知道有類似的方法或是可能可以解決我問題的方法 希望不吝教導小弟.. 感謝~~ 感謝各位前輩們花時間看完問題,如有好的建議給我 感激不盡~~ 發表人 - zre 於 2005/10/07 19:36:43
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-10 01:51:35 IP:218.167.xxx.xxx 未訂閱
zre: 試試看改成使用indy的元件.我本來也是用borland所附的Socket元件.但最後我改成了indy元件. http://delphi.ktop.com.tw/topic.php?topic_id=77164 如果不想使用indy元件.在server程式中的步驟4的button動作下將close跟open的動作分離試試看.
zre
一般會員


發表:1
回覆:4
積分:1
註冊:2005-05-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-11 21:51:04 IP:222.156.xxx.xxx 未訂閱
李兄你好: 把close open的動作分開我之前就有試過 仍不行 所以我也想改成indy版本的,我照著一些文章去做,但我卡在我去執行Fullc6.bat時,C6的folder有出來,但是裡面都是空的,並沒有產生compile後的東西! 不曉得是什麼原因? 如果我直接用bcb的indy可以嗎?感覺大家都去upgrade到9.0.18.. 麻煩你了...:)
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-11 22:48:53 IP:218.167.xxx.xxx 未訂閱
zre: 1.下載indy http://www.indyproject.org/indy/downloads/Indy_9_00_17_src.zip 2.按照包子大大精闢的說明進行安裝 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25182 我個人還是在用9.0.17版本.
zre
一般會員


發表:1
回覆:4
積分:1
註冊:2005-05-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-11 22:48:59 IP:222.156.xxx.xxx 未訂閱
請問各位 我之前在ServerSocket用的SendBuf()與ReceiveBuf()可以用indy的那個method取代呢?以及TServerSocketRead()可以用哪個event func取代? 自己找文章沒看見合乎我需要的範例參考.. ps:我的Server與Client間是傳遞一個Struct的資料...謝謝..
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-12 10:52:03 IP:218.167.xxx.xxx 未訂閱
zre: SendBuf()與ReceiveBuf()可以用WirteBuffer跟ReadBuffer取代. 至於TServerSocketRead()可以利用Excute()來達到. 因為indy是多執行緒.所以在Excute中如果要讀取資料的話 必須使用AThread->Connection->ReadBuffer()
zre
一般會員


發表:1
回覆:4
積分:1
註冊:2005-05-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-10-13 13:34:57 IP:222.156.xxx.xxx 未訂閱
引言: zre: 1.下載indy http://www.indyproject.org/indy/downloads/Indy_9_00_17_src.zip 2.按照包子大大精闢的說明進行安裝 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25182 我個人還是在用9.0.17版本.
你好,我之前有照包子大的文章照著做..但我卡在 (3.7)按「Add」Button,並將檔案指向 C:\Indy\C6\dclIndy60.bpl 這一步..我的C6沒有出現dclIndy60.bpl這個檔...於是我就先不動了.. 我現在先去用bcb內建的indy來改...還在努力中... 謝謝..
zre
一般會員


發表:1
回覆:4
積分:1
註冊:2005-05-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-10-14 17:51:35 IP:222.156.xxx.xxx 未訂閱
引言: zre: SendBuf()與ReceiveBuf()可以用WirteBuffer跟ReadBuffer取代. 至於TServerSocketRead()可以利用Excute()來達到. 因為indy是多執行緒.所以在Excute中如果要讀取資料的話 必須使用AThread->Connection->ReadBuffer()
後來用indy來測試,情況仍相同,已將方向改向Client端著手,感謝李兄的從旁協助..:) 也學會一點點indy的用法~ 收穫不少....
系統時間:2024-05-05 21:38:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!