線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1484
推到 Plurk!
推到 Facebook!

請教一個利用ServerSocket和ClientSocket設計協定的問題

尚未結案
sue690226
一般會員


發表:23
回覆:15
積分:7
註冊:2004-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-02 00:50:49 IP:203.67.xxx.xxx 未訂閱
各位先進好。 請教一個問題。 今天我用ClientSocket和ServerSocket設計協定。 一個交握式的協定。譬如我 Client--->Server要求傳檔 Server--->Client回復准許 Client--->Server傳檔 Server--->還傳檔案大小 請問我該怎麼讓Client或Server能夠接到對方回覆在繼續往下執行呢? 我目前是設計傳送完後都Sleep(100)等待接收。 可是這樣都抓不準時間會lose以致於產生當機。 請問ClientSocket和ServerSocket有可以類這樣的函示嗎。 While( )///Socket等待接收值 { ClientSocket->Socket->ReceiveBuff(&Protocal,Sizeof(Protocal)); } 接收到........ 謝謝您耐心看完!祝平安。
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-02 09:46:44 IP:221.169.xxx.xxx 未訂閱
1.不能用 sleep. 2.要使用狀態記錄。 比方說 server 接到傳檔。server 就要記錄目前狀態為接到傳檔。 等 Server 回覆准許後。狀態就要改為已送許可。 而 Client 開始送檔案時。Server 就可以由狀態知道已許可。就開始收。 當然你的順序有些問題。 檔案大小要先由 client ->server 才對。 通訊協定。我多次強調。就像兩個程式要利用檔案來做溝通。 A寫的B來讀。所以一定要讓兩方可以明確的知道目前要做什麼事。要怎麼做。 所以 client 要先跟 server 說。再來。你要接收多少 byte 的東西。 然後 server 接收了多少 byte 之後才再回來看 client 還有什麼命令。 所以。。。。。 你先把不 sleep 的動作幹掉。 再回來處理這些問題吧。
sue690226
一般會員


發表:23
回覆:15
積分:7
註冊:2004-07-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-02 13:34:51 IP:61.31.xxx.xxx 未訂閱
引言: 1.不能用 sleep. 2.要使用狀態記錄。 比方說 server 接到傳檔。server 就要記錄目前狀態為接到傳檔。 等 Server 回覆准許後。狀態就要改為已送許可。 而 Client 開始送檔案時。Server 就可以由狀態知道已許可。就開始收。 當然你的順序有些問題。 檔案大小要先由 client ->server 才對。 通訊協定。我多次強調。就像兩個程式要利用檔案來做溝通。 A寫的B來讀。所以一定要讓兩方可以明確的知道目前要做什麼事。要怎麼做。 所以 client 要先跟 server 說。再來。你要接收多少 byte 的東西。 然後 server 接收了多少 byte 之後才再回來看 client 還有什麼命令。 所以。。。。。 你先把不 sleep 的動作幹掉。 再回來處理這些問題吧。
恩~我Client在要求傳檔的同時就會把欲傳送檔案的大小告知SERVER了。謝謝暗黑破壞神提供的狀態記錄方法。不過我目前沒有頭緒該怎麼作 可以請暗黑破壞神提供一個範例嗎?謝謝
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-02 14:03:36 IP:221.169.xxx.xxx 未訂閱
嘿。問我問題。超過五行的程式我就有閱讀障礙了。 要我幫妳寫程式?以一行一美金計,我就寫給妳。 要我提供方向。我可以用提攜後進的想法來免費幫妳。^_____^ 用腦子想想看,有問題我可以回答妳。 要我寫 sample???很難。
brook
資深會員


發表:57
回覆:323
積分:371
註冊:2002-07-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-02 14:05:51 IP:218.160.xxx.xxx 未訂閱
我的例子是udp,你可參考看看. http://delphi.ktop.com.tw/topic.php?TOPIC_ID=34891
lu
高階會員


發表:11
回覆:189
積分:195
註冊:2003-11-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-02 14:33:47 IP:221.169.xxx.xxx 未訂閱
看完你的描述之後,心裡有一大問題產生 TCP是確定保證送達喔,你怎麼會有LOST勒....    你要不要檢查一下你程式是不是寫錯了? 給你一個提示....若你是一次傳送100KB到SERVER去 那SERVER 端的 ReceiveBuff() 這個Function,一次最多只接收 4KB (應該是吧,SIZE有點忘了),超過4K的部分,你就再呼叫一次ReceiveBuff()就收到了 還有~~100KB不是一次傳到喔,可能只先傳送50K,剩下的晚點才會到(視網路情形而定)    建議你改用INDY來寫,會比較好寫喔  ^^    ========================= 大家一起快樂寫程式
sue690226
一般會員


發表:23
回覆:15
積分:7
註冊:2004-07-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-10 13:55:39 IP:61.30.xxx.xxx 未訂閱
引言: 嘿。問我問題。超過五行的程式我就有閱讀障礙了。 要我幫妳寫程式?以一行一美金計,我就寫給妳。 要我提供方向。我可以用提攜後進的想法來免費幫妳。^_____^ 用腦子想想看,有問題我可以回答妳。 要我寫 sample???很難。
謝謝暗黑的指教。經過您的提示以及這幾天的努力我已經解決協定的問題了 我用switch的方法來設計。謝謝大家踴躍回答。祝平安
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-04-18 17:33:06 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-03 12:46:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!