序列化与反序列化 Socket中处理方法
来源:互联网 发布:开网店用什么软件 编辑:程序博客网 时间:2024/06/05 17:56
一、声明公共类,需定义为公共类库,且server与client端需同时引用此公共类
[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
0 0
- 序列化与反序列化 Socket中处理方法
- Socket编程(四)--对象序列化与反序列化
- 序列化与反序列
- 序列化与反序列
- jackson中自定义处理序列化和反序列化
- jackson中自定义处理序列化和反序列化
- C++中固定长度数字的序列化与反序列化处理
- C++中固定长度数字的序列化与反序列化处理
- 一个序列化与反序列化object的方法
- 序列化,反序列化与相关魔术方法
- Java常见序列化与反序列方法总结
- Java常见序列化与反序列方法总结
- .Net 中序列化与反序列化的应用
- C#中对象的序列化与反序列化
- C#中如何进行序列化与反序列化
- .Net中序列化与反序列化
- C#中对象的序列化与反序列化
- C#中对象的序列化与反序列化
- [Linux] undefined reference to `itoa'
- Financial application- computing future tuition
- Java 之EnumSet与EnumMap
- 浅谈ssh(spring+struts+hibernate)框架的搭建
- nginx使用zookeeper造成进程死锁和崩溃问题和解决方案
- 序列化与反序列化 Socket中处理方法
- 单例模式详解
- swoole1.8.0+版本异步redis安装(本实例为swoole1.8.10版本)详解
- 设置Android studio 禁用sdk检查更新
- VS2015使用小技巧 查看值类型int与引用类型string在栈中的地址、堆中的地址
- H5 canvas绘图描边小细节
- 单例模式三种模式,饿汉、饱汉、双重锁模式,实例及优劣详解
- cannot import name imread
- 移动端meta常用参数