原文网址: http://www.cnblogs.com/csdev

Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  开源地址是:https://github.com/MarcFletcher/NetworkComms.Net

使用networkcomms框架通信时,客户端发送消息,服务器端回复消息。

介绍开源的.net通信框架NetworkComms 一文中,我们介绍了如何从客户端发送字符串给服务器端,以及如何从服务器端接收发回来的字符串。

本文介绍一下,如何发送自定义的类数据给服务器端,和如何获取从服务端返回的数据。

新建一个类库

添加对Protobuf.dll的引用,这个文件中在MarcF-networkcomms.net-8e01e19f827f\packages\protobuf-net.2.0.0.668\lib相关文件夹中

添加这个引用,是因为通信时,使用了Protobuf进行序列化

添加2个可以序列化的类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProtoBuf;

namespace Demo1.Business
{
    [ProtoContract]
    public class ResMessage
    {
        public ResMessage()
        { }

        [ProtoMember()]
        public string Message { get; set; }

    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProtoBuf;

namespace Demo1.Business
{
    [ProtoContract]
    public class User
    {
        public User()
        { }

        [ProtoMember()]
        public string UserID { get; set; }

        [ProtoMember()]
        public string Name { get; set; }

    }
}

在Demo1.Client 和Demo1.Server中添加对Demo1.Business类的引用

客户端:

客户端代码:

 User theUser = new User();
            theUser.UserID = txtName.Text.Trim();
            theUser.Name = txtPsw.Text.Trim();

            ResMessage res = newTcpConnection.SendReceiveObject<User, ResMessage>(, theUser);

            if (res.Message == "验证成功")
            {
                MessageBox.Show("用户验证成功");
            }
            else
            {
                MessageBox.Show(res.Message);
            }

服务器端代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NetworkCommsDotNet.Connections;
using NetworkCommsDotNet;
using NetworkCommsDotNet.DPSBase;
using NetworkCommsDotNet.Tools;
using NetworkCommsDotNet.Connections.TCP;
using System.Net;
using Demo1.Business;

namespace Demo1.Server
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //IP地址和端口
            IPEndPoint thePoint = new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));
            //开始监听此IP和端口  使用TCP协议
            Connection.StartListening(ConnectionType.TCP, thePoint);

            NetworkComms.AppendGlobalIncomingPacketHandler<string>("GetName", IncomingMsgHandle);

            NetworkComms.AppendGlobalIncomingPacketHandler<User>("UserLong", IncoingHandleLogin);

            button1.Text = "已经开始监听";
        }

        private void IncomingMsgHandle(PacketHeader header, Connection connection, string msg)
        {
            try
            {
                string resMsg = "";

                if (msg == "星期一")
                    resMsg = "Monday";
                else if (msg == "星期二")
                    resMsg = "Tuesday";
                else if (msg == "星期三")
                    resMsg = "Wednesday";
                else if (msg == "星期四")
                    resMsg = "Thursday";
                else if (msg == "星期五")
                    resMsg = "Friday";
                else if (msg == "星期六")
                    resMsg = "Saturday";
                else if (msg == "星期日")
                    resMsg = "Sunday";

                connection.SendObject("ResName", resMsg);
            }
            catch (Exception ex)
            {

            }
        }

        private void IncoingHandleLogin(PacketHeader header, Connection connection, User theUser)
        {
            ResMessage  msg=new ResMessage ();

            " && theUser.Name == "张三")

                msg.Message = "登录成功";
            else
                msg.Message = "用户不存在";

            connection.SendObject("ResLogin", msg);
        }
    }
}

这样使用protobuf进行序列化的通信就完成了。因为neworkcomms默认使用protobuf进行通信,所以其他无需额外设置。如果使用其他序列化器,也可以很方便的设置。

原文地址  www.cnblogs.com/csdev

源码:http://pan.baidu.com/s/1dFNrMtN

介绍开源的.net通信框架NetworkComms框架之二 传递类的更多相关文章

  1. 介绍开源的.net通信框架NetworkComms框架 源码分析

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 售价249英镑 我曾经花了 ...

  2. 介绍开源的.net通信框架NetworkComms框架之四 消息边界

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  3. 介绍开源的.net通信框架NetworkComms框架 源码分析(十八 ) ConnectionListenerBase

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  4. 介绍开源的.net通信框架NetworkComms框架 源码分析(九) IPConnection

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  5. 介绍开源的.net通信框架NetworkComms框架 源码分析(三)PacketHeader

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  6. 介绍开源的.net通信框架NetworkComms框架之一 首字节验证

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  开源地 ...

  7. 介绍开源的.net通信框架NetworkComms框架之五 心跳检测

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  8. 介绍开源的.net通信框架NetworkComms框架之九 合并DLL

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  9. 介绍开源的.net通信框架NetworkComms

    Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  开源地址是:https://github.com/MarcFletcher/ ...

随机推荐

  1. 获取表单选中的值(利用php和js两种方式)

    php代码中获取表单中单选按钮的值: (单选按钮只能让我们选择一个,这里有一个“checked”属性,这是用来默认选取的,我们每次刷新我们的页面时就默认为这个值.) 例: <form name= ...

  2. BJFU 1068

    描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结 ...

  3. 介绍kali下的一些小工具

    1.macchanger 可以用来修改你的mac地址

  4. zw版·全程图解Halcon控件安装(delphi2007版)

    zw版·全程图解Halcon控件安装(delphi2007版) delphi+halcon,这个组合,可以说是图像分析的神级配置,无论是开发效率,还是运行实在是太高了,分分钟秒杀c+opencv,py ...

  5. Django开发笔记之数据库的设计

    后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤: 1,需求分析,这点子不用多说,而我也深刻体会到了没有原 ...

  6. 详解 Array.prototype.slice.call(arguments)

    首先,slice有两个用法,一个是String.slice,一个是Array.slice,第一个返回的是字符串,第二个返回的是数组 在这里我们看第二个方法 1.在JS里Array是一个类 slice是 ...

  7. [转] 停止支持的老版本ubuntu源列表-old-releases

    我使用的是ubuntu 9.10,在网上找了大半个月之后,今天终于找到了可用的源地址.感谢这位cgjcgs仁兄. 点击阅读原文 ubuntu的普通版本支持的时间都有限,过了支持的时间,更新源都会被停用 ...

  8. asp.net关于页面不回发,不生成__doPostBack方法问题的完美解决方案

    1.有可能是使用net4.0+iis6之后没有打补丁.解决办法在IE10中登录我公司的一个网站时,点击其它菜单,页面总会自动重新退出到登录页,后检查发现,IE10送出的HTTP头,和.AUTH Coo ...

  9. 【转】 Tomcat v7.0 Server at localhost was unable to start within 45

    转载地址:http://www.jsjtt.com/java/JavaWebkaifa/58.html Starting Tomcat v7.0 Server at localhost' has en ...

  10. easyui DataGrid 工具类之 Utils class

    import java.lang.reflect.InvocationTargetException;import java.text.ParseException;import java.text. ...