請教「用TCP/IP(Socket)的方式傳資料接收的問題」 |
答題得分者是:RaynorPao
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
想和各位前輩請教一下, 用Socket(TCP/IP)的方式來傳資料,
如果碰到兩筆資料傳輸的間隔很近,
似乎網路機制是會把這兩筆資料封包起來一起送。 所以在接收端會一次收到大於一筆的資料,
如果資料需要轉成結構,就會造成某些資料的遺失。 想請教一下個各位前輩是否也有碰過這種問題?
我以前遇到這問題,是在送端用timer來造傳送的間隔(非常小的間隔其實就夠),
讓資料不至被封包在一起,
那是在送端做這的小手腳。 而我現在是無法在送端做手腳,
只能在「收端」做接收的後續處理,
所以可能會收到一個大於一筆資料的封包~ 我該如何在「收端」處理這種狀況呢?
用一個buffer先全收下(以避免遺失資料),之後再來套結構? 還是? 請問各位前輩對這問題,是否有什麼看法,
讓小弟做個參考 謝謝~ 國泰平安
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 想和各位前輩請教一下, 用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 發送簡訊給我 |
包輩前說的好, 好像在「接收端」做管理的話,彈性就沒那麼大,
沒像在「發送端」方法來的多。 因為我現在的「發送端」是會在一段時間之內,
"狂"送資料,所以就如前面所說的,不是一個sendbuf一個封包,
可能是sendbuf二、三次之後,網路才幫你封包傳送,因為資料丟的太快了,
(是TCP/IP的機制的樣子,太快就乾脆一起打包送出去)。 而因為太快了,似乎也沒什麼機會叫「發送端」重送。 我去問別間的公司是怎麼寫的,再加上自己的猜測,
覺得他們就是在「接受端」用一個buffer,
先把送過來的資料全丟到buffer去,之後在這buffer中再來套"結構頭",
從"結構頭"來辨別這個資料的長度(因為不是每筆資料長度都相同),
之後再從buffer中取出資料,
所以不論這個「發送端」怎麼"狂"送,
buffer會做類似緩衝的功用。 等我寫出來之後,再和各位討論, 也希望各位前輩們能多給些意見,
替這個問題找到最合適的解決之道 國泰平安
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |