序列化和反序列化技术在编写Socket应用程序时的应用

我们在编写与Socket有关的应用程序时,在发送软为复杂的数据时,可能我们最常做的是把各个部分的数据转换为字符串,然后将这些字符串用一个分隔符连接起来进行发送。不过,不知道你有没有想过这样做还是有问题的。

比如,我用#来分隔各个字符串,在根据客户端输入的内容到服务器端进行查找,然后返回结果,万一用户输入的查找关键字中就包含#,那么就会影响我们对字符串进行分割了。

不知道各位有没有想过,把序列化和反序列化的技术也用到socket上?先定义一个封装数据的类,发送前将该类的对象序列化,然后发送;接收时,先接收字节流,然后再反序列化,得到某个对象。

这样一来是不是比单单发送字符串好多了。

下面我举的这个例子,服务器端用WPF开发,客户端是Windows Store App,当然我这里只是举例,其实这可以用于所有类型的应用程序,包括Windows Phone应用,原理是不变的。

一、服务器端

首先我们定义一个用于封装数据的类,这里就以一个产品信息类做演示,这个类在服务器端和客户端都要定义一遍,这样才方便序列化和反序列化,你也可以特立写到一个类库中,然后服务器端和客户端都引用该类库。

[DataContract(Name = "product")]
public class Product
{
    /// <summary>
    /// 产品编号
    /// </summary>
    [DataMember(Name = "product_no")]
    public string ProductNo { get; set; }
    /// <summary>
    /// 产品名称
    /// </summary>
    [DataMember(Name = "product_name")]
    public string ProductName { get; set; }
    /// <summary>
    /// 产品单价
    /// </summary>
    [DataMember(Name = "product_price")]
    public decimal ProductPrice { get; set; }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索服务器
, 字符串
, 数据
, 应用程序
, public
一个
java socket 序列化、socket 序列化、c socket 序列化、websocket 序列化、java序列化应用场景,以便于您获取更多的相关知识。

时间: 2024-09-03 00:03:47

序列化和反序列化技术在编写Socket应用程序时的应用的相关文章

VC++6.0和VS2005在编写MFC应用程序时,操作方面的差异

VC++6.0和VS2005在编写MFC应用程序时,操作方面的差异 一直用VC++6.0,对VS2005不太了解,下面简单的熟悉一下VS2005的一下功能,总结一下VS2005在编写MFC时候的应用. 1.    菜单项: 和VC6.0一样,也是找到资源视图,点击menu资源,在上面新建自己的菜单项.只是'属性',陈列的方式不同,VS2005陈列在右下角:在VC6.0中,我们对菜单项建立类向导,而在VS2005中,点右键,选择的是:'添加事件处理程序',然后再对话框里选择相应的消息类型,在类列表

讲解关于编写跨平台Java程序时的注意事项

使用Java语言编写应用程序最大的优点在于"一次编译,处处运行",然而这并不是说所有的Java程序都具有跨平台的特性,事实上,相当一部分的Java程序是不能在别的操作系统上正确运行的,那么如何才能编写一个真正的跨平台的Java程序呢?下面是在编写跨平台的Java程序是需要注意的一些事情:1.编写Java跨平台应用程序时,你可以选择JDK1.0,1.1,1.2或支持它们的GUI开发工具如:Jbuilder,Visual Age for Java 等等,但是必须注意你的Java程序只能使用

用Delphi编写Socket通信程序

笔者在工作中遇到对局域网中各工作站与服务器之间进行Socket通信的问题.现在将本人总结出来的TServerSocket和TClientSocket两个组件的基本用法写出来,希望与您分享. ClientSocket组件为客户端组件.它是通信的请求方,也就是说,它是主动地与服务器端建立连接. ServerSocket组件为服务器端组件.它是通信的响应方,也就是说,它的动作是监听以及被动接受客户端的连接请求,并对请求进行回复. ServerSocket组件可以同时接受一个或多个ClientSocke

Visual C# 2005中编写Socket网络程序

在网络环境下,我们最感兴趣的两个命名空间是System.Net和System.Net.Sockets.System.Net命名空间通常与较高程的操作有关,例如download或upload,试用HTTP和其他协议进行Web请求等等,而System.Net.Sockets命名空间所包含的类通常与较低程的操作有关.如果要直接使用Sockets或者TCP/IP之类的协议,这个命名空间的类是非常有用的. 在.Net中,System.Net.Sockets 命名空间为需要严密控制网络访问的开发人员提供了

VS2010平台编写CLR窗口程序时遇到错误LNK2022

问题描述 1>MSVCURTD.lib(mstartup.obj):errorLNK2022:元数据操作失败(80131195):自定义特性不一致:(0x0c000109).1>MSVCURTD.lib(mstartup.obj):errorLNK2022:元数据操作失败(80131195):自定义特性不一致:(0x0c00010e)......出错源于在Form1.h头文件中添加了一个类(位置在#pragmaonce上方),奇怪的是就算把该类删除,运行程序依然会得到同样的错误.恳请高手看看是

一起谈.NET技术,C#序列化与反序列化(Serializable and Deserialize)

     序列化是指将对象实例的状态存储到存储媒体的过程.在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流.在随后对对象进行反序列化时,将创建出与原对象完全相同的副本.      我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据.尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂.可以想象一下编写包含大量对象的大型业务应用程序的情形,程序员不得不为每一个对象

一起谈.NET技术,ASP.NET 中JSON 的序列化和反序列化

JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间.集合.字典的处理. 一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大括号'{}',中

一起谈.NET技术,XML和实体序列化和反序列化

近来的项目中用到了序列化就抽空学习了一下,拿出来给大家分享一下: 类为我们提供了自己对象串行化(Serialize)和反串行化(Deserialize)的xml的方法,该类可以序列化的内容: 公共类的公共读写字段或者属性 XmlElement对象 XmlNode对象 Dataset对象 实现了Icollection 或IEnumerable的类 该类在设计中有一个设计需求: 需要被序列化的类要提供一个空参数的构造函数,否则运行时会出现异常 在开发过程中可能会有很多地方要用到对象和XML相互转化,

Kafka消息序列化和反序列化

Kafka Producer在发送消息时必须配置的参数为:bootstrap.servers.key.serializer.value.serializer.序列化操作是在拦截器(Interceptor)执行之后并且在分配分区(partitions)之前执行的. 首先我们通过一段示例代码来看下普通情况下Kafka Producer如何编写: public class ProducerJavaDemo { public static final String brokerList = "192.1