作者HelloJimmy (揪~~竟,能不能考上?)
看板C_Sharp
標題[問題] 以Socket傳送固定大小資料??
時間Thu Jun 25 19:12:50 2009
大家好:
我需要寫一個專案,
由PDA端傳送多媒體檔案(JPG,WMV,WMA等).
Client端以TcpClient傳接資料,
Server以TcpListener聽是否有新連線進來,
每次進來就開一個新的TcpClient,
以上都沒問題.
接收端(Server)我採用
Me.tpc_TcpClient.GetStream.BeginRead(byte_ReadBuffer, 0, READ_BUFFER_SIZE,
AddressOf RecvMessage, Nothing)
不斷接收資料.
每個自訂封包有包含Header及Body,
Hearder裡有封包資訊(如檔案型態,長度,一個檔案被切成多少個封包..等等),
這樣接收端就可以知道是何種檔案傳送過來.
Body就用來放多媒體檔案的Binary Byte Array.
Header+Body固定長度2048 Bytes.
原本以為每次都送2048 Bytes,
接收端也會一次收到2048 Bytes資料(Buffer開的夠大).
但不幸的是,
接收端接收資料的大小都不一定.
有時五百多Bytes,
有時一千多Bytes.
我在每次Send資料的時候都有Sleep(100),
理論上有足夠時間讓Server完整接收才是.
且問我該如何才能接收固定大小的封包呢?
謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.71.83
1F:推 jlovet:tcp本來就不能讓你決定怎樣了吧? 他是串流一直寫入 06/25 23:55
2F:推 help0430:這是一定的吧~你送出2048就會收到2048~但是有可能 06/26 16:13
3F:→ help0430:先收到2000在收到48(數字亂說的)~所以請自己接起來 06/26 16:13
4F:→ HelloJimmy:更困惑我的是,我若送2048,收到2000+48也就算了,還會 06/27 16:39
5F:→ HelloJimmy:收到一些其他的Data(如不知哪來的好幾個35Bytes資料) 06/27 16:40
6F:→ HelloJimmy:使得接收端收到超過2048 Bytes.怎會這樣?? 06/27 16:41
7F:推 yk66:建議自己加上檔頭註明大小 原因可能是google://TCP MTU MSS 06/29 03:28
8F:→ HelloJimmy:我有加自己定義的Header,裡頭也有長度資訊.只是若收到 06/30 22:42
9F:→ HelloJimmy:一堆沒Header的Data,我就無法分辨是我要傳的資料還是 06/30 22:42
10F:→ HelloJimmy:別的東西... 06/30 22:43