networkcomms.net 来自英国的网络通信框架 官方网址 www.networkcomms.net 中文网址www.networkcomms.cn

客户端发送消息给服务器,服务器计算结果返回给客户端,这是网络通信应用程序中常见的使用情境。

拿用户登录举例子,客户端把包含用户名和密码的契约类发送给服务器,服务器从数据获取数据后与收到的契约类数据进行对比,如果一致,返回登录成功的信息,如果不一致,返回登陆不成功的信息

NetworkComms框架支持消息的同步调用,就像调用本地方法一般。

举例说明(本例中使用networkcomms v3语法):

用户登录

契约类1  UserInfo 用于存储用户名和密码,并传递到服务器端

 [ProtoContract]    public  class UserInfo    {        [ProtoMember(1)]        public string UserID;        [ProtoMember(2)]        public string Password;        public UserInfo() { }        public UserInfo(string userID, string password)        {            this.UserID = userID;            this.Password = password;        }    }

契约类2  ResMessage  用于存储服务器返回给客户端的消息

 [ProtoContract]    public class ResMessage    {        [ProtoMember(1)]        public string Message;        public ResMessage() { }        public ResMessage(string message)        {            this.Message = message;        }    }

客户端:

                    //声明一个契约类                    UserInfo userInfo = new UserInfo();                    //给契约类的用户ID赋值                    userInfo.UserID = txtUserID.Text.Trim();                    //给契约类的用户密码赋值                    userInfo.Password = txtPassword.Text.Trim();                     //把UserInfo的契约类消息发送给服务器端,并获取返回的ResMessage类型的契约类消息                       ResMessage loginContract = newTcpConnection.SendReceiveObject<UserInfo, ResMessage>("UserLogin", "ResUserLogin", 8000, userInfo);                    //下面是获取到服务器返回结果的处理方法                    if(loginContract.Message=="登录成功“)                             MessageBox.Show("登录成功,跳转到下一页面");                    else                             MessageBox.Show("用户名或者密码错误");

我们来总结一下上面的同步方法调用的格式

 返回的契约类类型    loginContract=newTcpConnectin.SendReceiveObject<传递的契约类类型,返回的契约类类型>("消息类型“,”消息返回类型",超时时间,契约类实例)  ResMessage loginContract = newTcpConnection.SendReceiveObject<UserInfo, ResMessage>("UserLogin", "ResUserLogin", 8000, userInfo);

我们看一下服务器端对应的代码

//为消息类型声明对应的处理器  NetworkComms.AppendGlobalIncomingPacketHandler<UserInfo>("UserLogin", IncomingLoginHandler);

//具体的处理方法

 //第三个参数为客户端发来的实际契约类类型,networkcomms通信框架自动把二进制数据解析为此类型数据 private void IncomingLoginHandler(PacketHeader header, Connection connection, UserInfo userInfo)        {            try            {                //声明返回的契约类实例                ResMessage  resMessage=new ResMessage();                string userID = userInfo.UserID;                string passWord = userInfo.Password;                //从数据库中验证用户名和密码               if (验证成功)                    //给契约类实例赋值                    resMessage.Message = "登录成功";                else                    resMessage.Message = "用户名密码错误";                //把验证结果返回给客户端                connection.SendObject("ResUserLogin", resMessage);                         }            catch (Exception ex)            {                LogTools.LogException(ex, "IncomingLoginHandler");            }        }

c#网络通信框架networkcomms内核解析之三 消息同步调用的更多相关文章

  1. c#网络通信框架networkcomms内核解析之一 消息传送

    networkcomms.net 来自英国的网络通信框架 官方网址 www.networkcomms.net 中文网址www.networkcomms.cn 在网络通信程序中,本地的类或者对象,要传输 ...

  2. c#网络通信框架networkcomms内核解析之一 消息传送2

    networkcomms.net 来自英国的网络通信框架 官方网址 www.networkcomms.net 中文网址www.networkcomms.cn 在网络通信程序中,本地的类或者对象,要传输 ...

  3. c#网络通信框架networkcomms内核解析 序言

    NetworkComms网络通信框架序言 networkcomms是我遇到的写的最优美的代码,很喜欢,推荐给大家:) 基于networkcomms2.3.1开源版本( gplv3)协议,写了一些文章, ...

  4. c#网络通信框架networkcomms内核解析之八 数据包的核心处理器

    NetworkComms网络通信框架序言 本文基于networkcomms2.3.1开源版本  gplv3协议 我们先回顾一个 c#网络通信框架networkcomms内核解析之六 处理接收到的二进制 ...

  5. c#网络通信框架networkcomms内核解析之十 支持优先级的自定义线程池

    NetworkComms网络通信框架序言 本例基于networkcomms2.3.1开源版本  gplv3协议 如果networkcomms是一顶皇冠,那么CommsThreadPool(自定义线程池 ...

  6. c#网络通信框架networkcomms内核解析之九 自定义处理方法的运行机制

    NetworkComms网络通信框架序言 本文基于networkcomms2.3.1开源版本  gplv3协议 我们自己写的处理方法都称之为自定义处理方法 比如,我们在服务器上写的与登陆相关的处理方法 ...

  7. c#网络通信框架networkcomms内核解析之六 处理接收到的二进制数据

    本文基于networkcomms2.3.1开源版本  gplv3协议 在networkcomms通信系统中,服务器端收到某连接上的数据后,数据会暂时存放在"数据包创建器"(Pack ...

  8. 循序渐进做项目系列(2):最简单的C/S程序——消息异步调用与消息同步调用

    上篇博客 循序渐进做项目系列(1):最简单的C/S程序——让服务器来做加法 实现了一个最简单的C/S程序,即让服务器来做加法.当时为了通俗易懂采用了消息异步调用的方式.今天我们要采用消息同步调用的方式 ...

  9. 消息同步调用-- ESFramework 4.0 进阶(07)

    分布式系统的构建一般有两种模式,一是基于消息(如Tcp,http等),一是基于方法调用(如RPC.WebService.Remoting).深入想一想,它们其实是一回事.如果你了解过.NET的Prox ...

随机推荐

  1. Python基础一(格式化输出、流程控制)

    (1)格式化输出(%% 第一个% 转译) # 格式化 输入 输出 name = input("Name:") age = input("Age:") job = ...

  2. CJE-Jenkins认证工程师考试预约报名流程

    先决条件 考试费用150美元,需要由master/visr信用卡支付 考试全英文  哈哈哈 考试目的 通过各种渠道能够找到Jenkins的学习资料,并能够完成jenkins的配置管理,还是想全面的系统 ...

  3. Android 将drawable下的图片转换成bitmap、Drawable

    将drawable下的图片转换成bitmap . Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.xxx ...

  4. laravel生成key

    安装laravel之后要设置一个随即字符串作为应用密钥(key),如果你是通过composer或者laravel安装器安装的 这个key已经自动生成并设置了. 一般情况下这个key为32位长度字符串. ...

  5. Java.util包教程

    java.util.ArrayDeque 类提供了可调整大小的阵列,并实现了Deque接口.以下是关于阵列双端队列的要点: 数组双端队列没有容量限制,使他们增长为必要支持使用. 它们不是线程安全的;如 ...

  6. ORACLE中的varchar2()与nvarchar2()的讲解

    Oracle中NVARCHAR2和VARCHAR2的区别 [转]NVARCHAR2和VARCHAR2的区别,从使用角度来看区别在于:NVARCHAR2在计算长度时和字符集相关的,例如数据库是中文字符集 ...

  7. Docker 容器使用

    Docker 客户端 docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项. runoob@runoob:~# docker :~# doc ...

  8. koa2实现登录注册功能(ejs+mongodb版)

    gtihub仓库地址:(由于国内处于敏感时期,github暂时无法访问) 主要使用的中间件: "ejs": "^2.7.1",(渲染模板) "koa& ...

  9. Validation Engine 表单验证

    前端开发仓库 » jQuery » jQuery Validation Engine 表单验证 jQuery Validation Engine 表单验证来源 功能强大的 jQuery 表单验证插件, ...

  10. nginx proxy_pass设置

    NGINX服务器的反向代理PROXY_PASS配置方法讲解 https://www.cnblogs.com/lianxuan1768/p/8383804.html Nginx配置proxy_pass转 ...