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协议已经替用户处理好了,不用担心顺序;用序列化处理大数据的效率比较低。