socket 的Send和 Receive

hky44 2012-11-09 06:04:27
我在发生数据时候 用List<ArraySegment<byte>> 传byte[] 把int,string转换的。 在服务端时候 读取 却是合并的 要指定位置分割来获取 可我在发送数据时候 根本据没法确定byte[]的大小 ,请教高手们有没什么方法解决
代码如下:
List<ArraySegment<byte>> byteList = new List<ArraySegment<byte>>();

System.ArraySegment<byte> bs = new ArraySegment<byte>(System.BitConverter.GetBytes(2));

byteList.Add(bs);

System.ArraySegment<byte> bs1 = new ArraySegment<byte>(Encoding.UTF8.GetBytes("aa"));
byteList.Add(bs);

int successSendBtyes = clientSocket.Send(byteList, SocketFlags.None); //发送数据

--------服务端读取------
List<ArraySegment<byte>> byteList = new List<ArraySegment<byte>>(2);

byte[] bigBuffer = new byte[1024];

byteList.Add(new ArraySegment<byte>(bigBuffer, 0, 1024));//这里需要位置和个数

byteList.Add(new ArraySegment<byte>(bigBuffer, 0, 1024));

int bytesReceived = clientSocket.Receive(byteList,SocketFlags.None);//接收数据

...全文
220 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
TonyNIFFFFFFFF 2012-11-10
  • 打赏
  • 举报
回复
同意上面哥们的观点,你自己定制 规范。 分段发送,就像迅雷,把一个资源分割成N多个小块。
bdmh 2012-11-09
  • 打赏
  • 举报
回复
那完全是你的问题,你要制定好协议,包括包头,里面包含整个长度等信息,你接收时,要等到接收到的数据达到这个长度后(完全接受完毕)后,在解码数据,你可以用序列化

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧