介绍开源的.net通信框架NetworkComms
Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 开源地址是:https://github.com/MarcFletcher/NetworkComms.Net
networkcomms通讯框架使用简单方便,性能稳定.
从github上下载到源码后,需要Visual studio安装nuget 加载相关DLL.
用VS打开解决方案后,删除上图中暂时用不到的项目,然后进行编译
networkcomms默认使用protobuf进行数据的序列化.
下面通过一个简单的例子,使用NetworkComms框架,进行简单的客户端与服务器的通信。
1、新建2个WinForm的项目
第一步,是 添加引用,引用2个项目 ,一个是networkcomms通信框架 一个是ProtobufSerializer 。NetworkComms是通信框架,ProtobufSerializer是序列化用的
监听代码:
//IP地址和端口 IPEndPoint thePoint = new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text)); //开始监听此IP和端口 使用TCP协议 Connection.StartListening(ConnectionType.TCP, thePoint);
客户端连接服务器代码:
//连接信息 connInfo = new ConnectionInfo(txtIP.Text, int.Parse(txtPort.Text)); //连接服务器 newTcpConnection = TCPConnection.GetConnection(connInfo);
通过上面的几步,客户端就同服务器端取得了联系,NetowrkComms通信框架会自动发送心跳包,保持客户端与服务器端之间的TCP连接.
那么,服务器端与客户端如何通信呢
比如,客户端发起一个请求,服务器端回复一个请求。这就涉及到一个消息类型的概念。
使用networkcomms 通信框架时,客户端发送消息给服务器端是,需要制定当前消息的消息类型,和期待返回的消息类型。服务器端返回消息时,指定客户端期待返回的消息类型。
这样客户端就能获取到响应的返回消息。
示例: 客户端从服务器获取响应的英文名称
客户端代码:
, listBox1.Text); MessageBox.Show("英文名称是:" + resMsg);
GetName 是请求的消息类型 ResName 是期待的返回的消息类型
在服务器端 我们编写代码时,处理 GetName类型的消息时,返回消息类型设定为ResName 即可
如下:
服务器端代码:
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); //关联消息类型为GetName的消息的处理方法 NetworkComms.AppendGlobalIncomingPacketHandler<string>("GetName", IncomingMsgHandle); 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) { } }
示例 源码地址
介绍开源的.net通信框架NetworkComms的更多相关文章
- 介绍开源的.net通信框架NetworkComms框架 源码分析
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 售价249英镑 我曾经花了 ...
- 介绍开源的.net通信框架NetworkComms框架之二 传递类
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 开源地 ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析(二)ConnectionInfo
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- 介绍开源的.net通信框架NetworkComms框架之四 消息边界
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- 介绍开源的.net通信框架NetworkComms框架之三 传递List
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 开源地 ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析(二十三 )TCPConnection
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析(二十二 )TCPConnectionStatic
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析(二十一 )TCPConnectionListener
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析(二十 )ConnectionCreate
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析(十九 )ConnectionIncomingData
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
随机推荐
- Springmvc中 同步/异步请求参数的传递以及数据的返回
转载:http://blog.csdn.net/qh_java/article/details/44802287 注意: 这里的返回就是返回到jsp页面 **** controller接收前台数据的方 ...
- mac下pmset的使用方法
在终端输入:pmset -g custom 这个命令可以显示系统所有的电源设置 lidwake: 当屏幕掀开的时候唤醒Mac,1是开启 0是关闭autopoweroff: 如果Mac处于睡眠状 ...
- poj2354Titanic(两点的球面距离)
链接 球面距离计算公式:d(x1,y1,x2,y2)=r*arccos(sin(x1)*sin(x2)+cos(x1)*cos(x2)*cos(y1-y2)) x1,y1是纬度\经度的弧度单位,r为地 ...
- Python学习笔记17—Tornado
实例 #!/usr/bin/env Python #coding:utf-8 import tornado.httpserver import tornado.ioloop import tornad ...
- linux 命令 第一波
man 命令名字 查看命令详细解释 q退出cd 切换目录cd .. 回到上级目录su 切换用户pwd 当前目录mkdir cmy 创建cmy文件夹[目录]rm cmy 删除cmy文件夹[如果cmy里面 ...
- Android提高篇之自定义dialog实现processDialog“正在加载”效果、使用Animation实现图片旋转
知识点: 1.使用imageview.textview自定义dialog 2.使用Animation实现图片旋转动画效果 3.通过自定义theme去掉dialog的title 没有使用progres ...
- D3.js 插入元素,删除元素
插入元素涉及的函数有两个: 一.append():在选择集末尾插入元素 假设有三个段落元素 <p>Apple</p> <p>Pear</p> <p ...
- nfs服务器设置
前段时间重新装了一下Linux系统,结果导致NFS服务器总是挂在不成功,于是粗略学习了一下: NFS服务需要两个软件包: 1.nfs-utiles-* 2.portmap-* nfsd:它是基本的NF ...
- cesium调用天地图服务
全球矢量地图服务 var viewer = new Cesium.Viewer("cesiumContainer", { animation: false, //是否显示动画控件 ...
- phalcon:model 事件与事件管理器
事件与事件管理器(Events and Events Manager)¶ Models allow you to implement events that will be thrown when p ...