TServerSocket&TClientSocket原理解釋 |
答題得分者是:brook
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
請問各位大大!
小弟有下列幾個問題,希望大大們指導!
假如小弟自定一個結構為:
typedef struct _MYPACKET2 { char szCommand[COMMAND_LEN]; int iIndex; BYTE bData[DATA_LEN]; int iLen; } MYPACKET2, *PMYPACKET2;問題一:要如何把這結構指定給TClientSocket元件(語法為何?) 問題二:結構指定給TClientSocket後,Socket的型態為何?是二進制嗎? 問題三:當TServerSocket接收後,要用iIndex來檢查是否有Loss,例如:收到0x01,0x03那就知道0x02Loss,那程式要如何重傳、重傳方式是從0x01、0x02、0x03全部都重傳嗎?還是只有重傳0x02! 問題四:小弟有看過其它程式的寫法是: if(Buffer[i] == 0x00000000) { //處理事件一 } if(Buffer[i] == 0x0000001) { //處理事件二 }請問Buffer[i]為什麼會有0x00000000與0x00000001呢? 請各位大大不吝指教!小弟在網站找了很多,但都只有程式碼,並沒有說明原理,所以懇請大大解釋一下!謝謝! |
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
問題一:要如何把這結構指定給TClientSocket元件(語法為何?)
a:一般接收會收到一個buffer,只要把指標指過去即可用.
如: MYPACKET2 *p = (MYPACKET2*)buf;
你就可以用p去讀取你要的東西. 問題二:結構指定給TClientSocket後,Socket的型態為何?是二進制嗎?
a:電腦的所有資料,不都是二進制嗎? 問題三:當TServerSocket接收後,要用iIndex來檢查是否有Loss,例如:收到0x01,0x03那就知道0x02Loss,那程式要如何重傳、重傳方式是從0x01、0x02、0x03全部都重傳嗎?還是只有重傳0x02!
a:以上3種都可,看你方便,我比較喜歡0x02及之後重傳. 問題四:小弟有看過其它程式的寫法是:
請問Buffer[i]為什麼會有0x00000000與0x00000001呢?
a:因為Buffer定義為long,共4個bytes.(char是0x00到0xff). 你也可用直接用0,和1代替,歡喜就好.
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
引言: 感謝brook大大的回答! 小弟要用何語法來重傳0x02及之後的資料呢?再次謝謝大大!1.你server和client是不是都自己寫,假如是的話你愛怎麼定義你的 szCommand 就怎麼定義,只要server端和client端都能通就好.如果server端是別人寫的,那就要參考server端的定義才可以. 2. 我可能會這樣定義 client端 server端 szCommand iIndex bData szCommand iIndex bData 0x00000001 0 AAAAA.TXT => 1.向主機要檔案AAAAA.TXT 2.主機回傳檔案大小 <= 0x00000002 1000 AAAAA.TXT(假如檔案大小為1000bytes) 0x00000003 1 => 3.向主機要檔案的第一筆資料 4.主機回傳第一筆資料 <= 0x00000004 1 DATA 1.每筆資料最好512bytes就好,太大的話有可能會被分成2筆資料. 2.如此重覆的3,4就可把檔案傳完. 3.主控權最好在client端. 4.要5毛給一塊時,不要帳單全收,再要一次,或者沒要到時,過2秒再要一次. 5.當要很多次還是要不到時,可考慮離線,有可能主機己掛,或網路有問題. 6.你可參考我之前寫的,如下網址:http://delphi.ktop.com.tw/topic.php?TOPIC_ID=34891 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |