作者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