科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Visual C#建立简单消息传递系统

Visual C#建立简单消息传递系统

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文讨论了基于套接字的体系结构以及怎样建立可同时在PC和Pocket PC上运行的消息传递系统

作者:陶刚编译 来源:yesky 2007年11月13日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
传递消息

  通过套接字传递未经处理的数据毫无乐趣,而通过套接字传递对象可能更有趣一些。为了达到这个目标,我们需要一个得到对象并把它转换为字节流的途径。最明显的解决方案是使用运行时(runtime)提供的串行化(serialization)支持。不幸的是,使用这种方法会有少量的问题。

  第一个问题是串行化需要很大的开销,这意味着它使用的字节比传递数据必要的字节多一些。如果使用SOAP格式化,这个问题就更严重。这是否成为一个问题依赖于应用程序的性能需求。第二个问题是串行化在简洁框架组件中不能使用。由于没有简单的实现方法,我们需要自己做这个工作。在这个过程中,我们做的事情比串行化要少多了。

  我们从建立一个枚举开始,它定义了可以传递什么类型的消息:

public enum MessageType
{
RequestEmployee = 1,
Employee,
}

  对于每种消息类型,我们需要一个对象定义该对象:

public class RequestEmployee: ISocketObject
{
int id;
public RequestEmployee(int id)
{
this.id = id;
}

}

public RequestEmployee(BinaryReader reader)
{
id = reader.ReadInt32();
}

public int ID
{
get
{
return id;
}
}

public void Send(BinaryWriter writer)
{
writer.Write((int) MessageType.RequestEmployee);
writer.Write(id);
}
}

  我们使用的这种途径与ISerializable接口很相似。ISocketObject接口定义了一个Send()函数,它串行化通过通道的数据,接着还有一个并行化该数据的构造函数。

  在这些对象中的某个串行化自身的时候,它发送的第一个信息是消息标识符。它让接收者知道将到达哪种类型的对象并建立该对象。下面是客户端的代码:

RequestEmployee requestEmployee = new RequestEmployee(15);
requestEmployee.Send(writer);

MessageType messageType = (MessageType) reader.ReadInt32();

switch (messageType)
{
case MessageType.Employee:
Employee employee = new Employee(reader);
Console.WriteLine("{0} = {1}", employee.Name, employee.Address);
break;
}

  RequestEmployee这段代码建立了一个对象并把它发送给服务器程序,接着它找出返回的是哪种对象,并且并行化它。

  尽管这个示例项目被标记为client和server,但是两者之间唯一真正的差别是连接建立的方式。当这个过程完成后,它们都使用相似的代码发送和接收消息,即使它们需要处理自己的消息集合。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章