日期:2014-05-17  浏览次数:21141 次

C#中socket通信传输大数据问题
写了一个关于socket通信的程序,用于传输不固定的数据对象,传输的数据结构大体如下:
    [Serializable]
    public class SocketMsg
    {
        public EnumSocketType Type = EnumSocketType.AskFunc; // 类型
        public bool IsTransaction = false;
        public object obj; // 传输的数据对象
    }
  想通过客户端序列化的方式传输数据,在服务端再反序列化得到需要的数据。客户端采用如下发送方式:
             MemoryStream msSend = new MemoryStream();
             BinaryFormatter formatter = new BinaryFormatter();
             formatter.Serialize(msSend, Msg); //Msg为SocketMsg类型的对象
             msSend.Flush();
             Byte[] buffer = new Byte[255];
             msSend.Position = 0;
             while (msSend.Read(buffer, 0, buffer.Length) > 0)
             {
                clientSocket.Send(buffer);
             }
现在主要问题是传输的object长度不固定,在接收方该怎么判断结束,并且不知道服务端接收时会不会存在顺序的问题,还请各位指教,谢谢了!

------解决方案--------------------
这个WCF用的好像是固定配置65535
如果数据大于这个数的话就会报错
个人感觉你Socket的话 加一个开始和结束标记
#Start# 
#End#
这个样子吧
知道接收到了End标记 才解析
------解决方案--------------------
标记头尾。。。
------解决方案--------------------
要有头信息,先发送一些基本信息头过去,告诉对方要发送多少数据,还可以加校验保证数据完整,对方需要循环接收知道接收完全部数据
------解决方案--------------------
引用:
即先收到数据部分,再收到头信息。



道理来说 应该不能.UDP不知道 反正TCP好像不能.

正常的协议 都有头 尾 以及校验位的..
------解决方案--------------------
数据包乱序的问题tcp协议已经替用户处理好了,不用担心顺序;用序列化处理大数据的效率比较低。