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

請教「用TCP/IP(Socket)的方式傳資料接收的問題」

答題得分者是:RaynorPao
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-30 20:09:39 IP:61.224.xxx.xxx 未訂閱
想和各位前輩請教一下,    用Socket(TCP/IP)的方式來傳資料, 如果碰到兩筆資料傳輸的間隔很近, 似乎網路機制是會把這兩筆資料封包起來一起送。    所以在接收端會一次收到大於一筆的資料, 如果資料需要轉成結構,就會造成某些資料的遺失。    想請教一下個各位前輩是否也有碰過這種問題? 我以前遇到這問題,是在送端用timer來造傳送的間隔(非常小的間隔其實就夠), 讓資料不至被封包在一起, 那是在送端做這的小手腳。    而我現在是無法在送端做手腳, 只能在「收端」做接收的後續處理, 所以可能會收到一個大於一筆資料的封包~    我該如何在「收端」處理這種狀況呢? 用一個buffer先全收下(以避免遺失資料),之後再來套結構? 還是?    請問各位前輩對這問題,是否有什麼看法, 讓小弟做個參考 謝謝~ 國泰平安
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-30 21:27:06 IP:61.221.xxx.xxx 未訂閱
引言: 想和各位前輩請教一下, 用Socket(TCP/IP)的方式來傳資料, 如果碰到兩筆資料傳輸的間隔很近, 似乎網路機制是會把這兩筆資料封包起來一起送。 所以在接收端會一次收到大於一筆的資料, 如果資料需要轉成結構,就會造成某些資料的遺失。 想請教一下個各位前輩是否也有碰過這種問題? 我以前遇到這問題,是在送端用timer來造傳送的間隔(非常小的間隔其實就夠), 讓資料不至被封包在一起, 那是在送端做這的小手腳。 而我現在是無法在送端做手腳, 只能在「收端」做接收的後續處理, 所以可能會收到一個大於一筆資料的封包~ 我該如何在「收端」處理這種狀況呢? 用一個buffer先全收下(以避免遺失資料),之後再來套結構? 還是? 請問各位前輩對這問題,是否有什麼看法, 讓小弟做個參考 謝謝~ 國泰平安 < face="Verdana, Arial, Helvetica">
gemi0305 你好:
(1)理論上你說的方法已經達到某種程度的檢查,可以規定每次傳送封包的最大
   長度,如果超過這個長度的話,就視為不合法的封包
(2)如果收到不合法的封包,就應該捨棄,server 端應該要求 client 端再重傳
   一次封包
(3)另外,對於封包的檢查,還有很多其他的方法,例如: hash, checksum...,
   可以把這些檢查的機制,一起放在你自己定義的 structure 裡面,以方便檢
   查
(4)不過,你的前題是 client 端的程式並不是自己寫的,因此,以上的方式,
   也就不見得全部適用了吧??
    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-30 23:47:17 IP:61.224.xxx.xxx 未訂閱
包輩前說的好,    好像在「接收端」做管理的話,彈性就沒那麼大, 沒像在「發送端」方法來的多。    因為我現在的「發送端」是會在一段時間之內, "狂"送資料,所以就如前面所說的,不是一個sendbuf一個封包, 可能是sendbuf二、三次之後,網路才幫你封包傳送,因為資料丟的太快了, (是TCP/IP的機制的樣子,太快就乾脆一起打包送出去)。    而因為太快了,似乎也沒什麼機會叫「發送端」重送。    我去問別間的公司是怎麼寫的,再加上自己的猜測, 覺得他們就是在「接受端」用一個buffer, 先把送過來的資料全丟到buffer去,之後在這buffer中再來套"結構頭", 從"結構頭"來辨別這個資料的長度(因為不是每筆資料長度都相同), 之後再從buffer中取出資料, 所以不論這個「發送端」怎麼"狂"送, buffer會做類似緩衝的功用。    等我寫出來之後,再和各位討論,    也希望各位前輩們能多給些意見, 替這個問題找到最合適的解決之道 國泰平安
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-05 19:01:17 IP:61.224.xxx.xxx 未訂閱
包前輩~    我已經實作出來了, 在「接收端」用個buffer來暫存再來一一套結構。 心得分享一下
系統時間:2024-04-28 8:45:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!