序列化与反序列化 Socket中处理方法
2016-09-05 10:55
169 查看
一、声明公共类,需定义为公共类库,且server与client端需同时引用此公共类
三、server接收端反序列化处理
测试数据正常,效果刚刚的
说明:socket通讯类引用自开源的SanNiuSignal.dll
[Serializable] public class FormatTransfer//文件传输格式 { public int header=-1;//格式头,0为MAP文件传输,1为程序上传 public string path;//存储路径 public int fileDat;//Dat文件号 public int fileTxt;//Txt文件号 public int fileBmp;//Bmp文件号 public int fileRar;//程序文件号 public DateTime timeSend;//发送时间 public string userID;//用户ID public string userName;//用户姓名 public string userVprev;//用户权限 public string userDept;//用户部门 } 二、client发送端的序列化(此为二进制序列化格式,为图省事,XML方式测过一次,内存流搞错了,理论应该是一样的) sendFilesNo[0] = TxClient.SendFile(@"D:\Personal\桌面\1.dat"); //dat sendFilesNo[1] = TxClient.SendFile(@"D:\Personal\桌面\1.TXT"); //dat sendFilesNo[2] = TxClient.SendFile(@"D:\Personal\桌面\1.BMP"); //dat FormatTransfer ft = new FormatTransfer(); ft.header = 0; ft.path=@"D:\DM\"; ft.fileDat=sendFilesNo[0]; ft.fileTxt=sendFilesNo[1]; ft.fileBmp=sendFilesNo[2]; ft.timeSend = DateTime.Now; ft.userName = userinfo.Name; ft.userID = userinfo.ID; //XmlSerializer xs = new XmlSerializer(typeof(FormatTransfer)); //XML序列化 BinaryFormatter bf = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); //xs.Serialize(ms, ft); bf.Serialize(ms, ft);//将类型转换转换为内存流 ms.Flush(); byte[] buffer = new byte[1024]; ms.Position = 0; //将流的当前位置重新归0,否则Read方法将读取不到任何数据 while (ms.Read(buffer, 0, buffer.Length) > 0) { TxClient.sendMessage(buffer); //从内存中读取二进制流,并发送 } //TxClient.sendMessage(ms.ToArray());//发送字节组,此方法可能因溢出引起错误 ms.Close(); //发送接收后格式 //TxClient.sendMessage(@"MAPF&D:\DM\#" + sendFilesNo[0].ToString() + "#" + sendFilesNo[1].ToString() + "#" + sendFilesNo[2].ToString() + "&" + userinfo.ID+"#"+userinfo.Name);//发送目录信息 //说明,备注代码全是瞎搞的,测了半天都搞错原理了
三、server接收端反序列化处理
/// <summary> /// 当接收到来之客户端的图片信息的时候 /// </summary> /// <param name="ipEndPoint"></param> /// <param name="bytes"></param> private void acceptBytes(IPEndPoint ipEndPoint, byte[] bytes) { //MessageBox.Show(bytes.Length.ToString()); //this.pictureBox1.Image = objectByte.ReadImage(bytes); MemoryStream ms = new MemoryStream(bytes); //byte[] buffer = new byte[1024]; ms.Position = 0; //XmlSerializer xs = new XmlSerializer(typeof(FormatTransfer)); //XML反序列化 //FormatTransfer ft = (FormatTransfer)xs.Deserialize(ms); //ms.Write(buffer, 0, buffer.Length); //将接收到的数据写入内存流 //ms.Flush(); BinaryFormatter bf = new BinaryFormatter(); FormatTransfer ft = (FormatTransfer)bf.Deserialize(ms); ms.Close(); MessageBox.Show(ft.userName); }
测试数据正常,效果刚刚的
说明:socket通讯类引用自开源的SanNiuSignal.dll
相关文章推荐
- 在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出MethodArgumentNotValidException异常,因此,只需要在ExceptionHandler类中添加处理对应异常的方法即可。
- c# Json 自定义类作为字典键时,序列化和反序列化的处理方法
- 【ASP.NET】DataContract序列化,反序列化对象中包含用接口声明的属性时的处理方法
- 我对C++ string和length方法的一个长期误解------从protobuf序列化说起(没处理好会引起数据丢失、反序列化失败哦!)
- 我对C++ string和length方法的一个长期误解------从protobuf序列化说起(没处理好会引起数据丢失、反序列化失败哦!)
- .NET Socket开发(3) 利用Keep-Alive处理Socket网络异常断开的方法
- flash as3 socket 不缓存图片的处理方法
- IOCP中的socket错误和资源释放处理方法
- 在C#中利用Keep-Alive处理Socket网络异常断开的方法
- .Net提供的三种序列化和反序列化方法
- 序列化,反序列化方法
- 通过序列化和反序列化泛型数据实体集合来实现持久化数据对象的方法
- 在C#中利用Keep-Alive处理Socket网络异常断开的方法 (转)
- 通过SOCKET传递序列化的Java对象的方法 序列化 Socket
- 在C#中利用Keep-Alive处理Socket网络异常断开的方法
- 利用Keep-Alive处理Socket网络异常断开的方法
- IOCP中的socket错误和资源释放处理方法
- WPF/Silverlight 中利用XamlReader /Writer 来处理对象的序列化反序列化
- IOCP中的socket错误和资源释放处理方法
- 在C#中利用Keep-Alive处理Socket网络异常断开的方法