[問題] 以Socket傳送固定大小資料??

看板C_Sharp作者 (揪~~竟,能不能考上?)時間16年前 (2009/06/25 19:12), 編輯推噓3(307)
留言10則, 4人參與, 最新討論串1/1
大家好: 我需要寫一個專案, 由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

06/25 23:55, , 1F
tcp本來就不能讓你決定怎樣了吧? 他是串流一直寫入
06/25 23:55, 1F

06/26 16:13, , 2F
這是一定的吧~你送出2048就會收到2048~但是有可能
06/26 16:13, 2F

06/26 16:13, , 3F
先收到2000在收到48(數字亂說的)~所以請自己接起來
06/26 16:13, 3F

06/27 16:39, , 4F
更困惑我的是,我若送2048,收到2000+48也就算了,還會
06/27 16:39, 4F

06/27 16:40, , 5F
收到一些其他的Data(如不知哪來的好幾個35Bytes資料)
06/27 16:40, 5F

06/27 16:41, , 6F
使得接收端收到超過2048 Bytes.怎會這樣??
06/27 16:41, 6F

06/29 03:28, , 7F
建議自己加上檔頭註明大小 原因可能是google://TCP MTU MSS
06/29 03:28, 7F

06/30 22:42, , 8F
我有加自己定義的Header,裡頭也有長度資訊.只是若收到
06/30 22:42, 8F

06/30 22:42, , 9F
一堆沒Header的Data,我就無法分辨是我要傳的資料還是
06/30 22:42, 9F

06/30 22:43, , 10F
別的東西...
06/30 22:43, 10F
文章代碼(AID): #1AGrkpgf (C_Sharp)