全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3188
推到 Plurk!
推到 Facebook!

瞬傳多筆資料的TCP封包(使用接收端處理)

 
gemi0305
版主


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-05 15:24:29 IP:210.66.xxx.xxx 未訂閱
這是最近在工作上遇到的問題, 找到方法和實驗之後,整理出來和各位分享~    當遇到「發送端」狂送資料時, 因為TCP不會一筆資料一筆資料封包傳送,因為太快了, TCP會先把全部的資料一起打包,做一個封包來傳送,    這會造成「接收端」收到一個大封包, 如果接放端不知道這是很多筆資料所包成的, 必會無法讀出封包的資料。    通常一般人會在「發送端」做手腳, 如: 加個Sleep(5)或是用Timer來讓資料無法連著送(雖然還是狂送),    但如果不能在「發送端」做手腳呢??    像是我們是用自己的程式由TCP/IP去收別人程式傳過來的資料, 你能保證別人會幫你先做處理嗎?    所以我們就得在「接收端」另做處理,就是這個程式, 我由Client當「發送端」,由Server當「接收端」, Client可以先把資料收集起來,放在Queue, 再用傳送,瞬間一次全部傳給Server(用迴路從Queue中一筆一筆狂丟)。    Server收到資料,不馬上處理,而是先放在一個buffer, 在buffer裡做緩衝和分析封包,看這封包是由幾個資料所構成的, 再一一讀出封包內的資料。    這是在client用queue,如果想試試更快的,可以寫個for迴圈, 一直猛sendbuf(),就可以知道Tcp/ip打包的方式了。    請各位前輩多多給些意見和指點
附加檔案:35262_Server.zip
vagrant
一般會員


發表:29
回覆:72
積分:20
註冊:2003-07-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-30 10:57:49 IP:218.189.xxx.xxx 未訂閱
我需要For Delphi 有嘛??
orson
中階會員


發表:5
回覆:135
積分:58
註冊:2002-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-30 11:48:02 IP:211.74.xxx.xxx 未訂閱
我記得 真的要一個一個小封包都收或都要送的話 直接在winsock的socket option去設定就好了(SOCK_OPT_TCP_NOWAIT 這一定錯 不過參數名稱應該差不多) 這樣一來 程式部分完全不用動 :P Orson
系統時間:2024-07-02 3:02:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!