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

TServerSocket&TClientSocket原理解釋

答題得分者是:brook
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-15 16:46:19 IP:211.74.xxx.xxx 未訂閱
請問各位大大! 小弟有下列幾個問題,希望大大們指導! 假如小弟自定一個結構為:
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-18 15:22:23 IP:218.167.xxx.xxx 未訂閱
問題一:要如何把這結構指定給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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-19 01:42:04 IP:59.104.xxx.xxx 未訂閱
感謝brook大大的回答! 小弟要用何語法來重傳0x02及之後的資料呢?再次謝謝大大!
brook
資深會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-20 14:17:03 IP:218.167.xxx.xxx 未訂閱
引言: 感謝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
系統時間:2024-04-29 19:01:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!