-
2021-01-02 22:30:59
C#网络通信
1·通信模型
- TCP七层模型
- OSI五层模型
- 协议:数据通信的标准,规定数据的格式,传递、接收的双方都在按照这个格式对数据进行处理
2·建立服务器与客户端
- IPEndPoint类
- 是抽象类EndPoint的实现类
- Socket对象的RemoteEndPoint、LocalEndPoint都是这个类型
- 属性Address:使用IPV4表示的地址
- 属性Port:使用int表示的端口
- Socket类
- 可用于服务器端的开发也可用于客户端的开发
- 构造方法
- 参数AddressFamily:指定使用IPV4的地址(InterNetwork)
- 参数SocketType:指定使用传输方式(流式Stream)
- 参数ProtocolType:指定协议类型(TCP)
- 方法Bind():绑定IP与端口,然后就可以作为服务器监听特定端口
- 方法Listen():置于监听状态参数是最大挂起数
- 方法Accept():接收客户端连接,返回Socket对象,这个方法会阻塞当前线程,建议开启新线程执行此方法,结合尾递归,就可以接收多个客户端
- 方法Receive():接收客户端发过来的信息,以字节为单位进行操作,这个方法会阻塞当前线程,建议开启新线程执行此方法,结合尾递归,就可以持续接收多条消息
- 方法Send():以字节为单位发送消息
更多相关内容 -
C#网络通信程序设计
2018-07-22 20:31:30网络通信c#,详细,很好用,2015年初版,实用性很强 包括各种通信方式,非常详尽,有代码事例,很容易理解 非常实用的一本书 -
C#网络通信简单示例
2018-04-10 09:39:07C#网络通信简单示例,包括server端和client端,可以直接编译运行 -
C#网络通信程序设计978-7-302-38988-0
2018-07-30 16:49:12C#网络通信程序设计978-7-302-38988-0 C#网络通信程序设计978-7-302-38988-0 -
C#网络通信程序设计 源码
2018-04-15 22:59:25阐述主机扫描、串口通信、TCP协议编程、UDP协议编程、木马程序、屏幕监视、IP语音网络通信、网络视频传输、Email协议编程、FTP协议编程、网络测量程序、网络信息加密传输和网络信息隐藏通信编程等原理、技术分析、... -
基于C#的网络通信实例
2018-11-02 10:26:26基于C#的网络编程实例,程序编辑了一个客户端和服务端,让其进行数据通信 -
C#网络通信程序设计(源码)
2022-03-31 17:20:22C#网络通信程序设计书中源码 -
C# 网络通信调试助手 (内有串口、TCP、UDP、http服务)
2021-01-10 20:52:20C# 网络通信助手 (内有串口、TCP、UDP、http服务) 1、tcp客户端 2、tcp服务端 3、udp客户端 4、udp服务端 5、串口调试 6、可以创建多个窗口引用程序 7、启动http服务 启动HTTP服务后可在网页中直接获取接受...C# 网络通信调试助手 (内有串口、TCP、UDP、http服务)
每个窗体的代码都是独立的,方便修改扩展
1、tcp客户端
2、tcp服务端
3、udp客户端
4、udp服务端
5、串口调试
6、可以创建多个窗口引用程序
7、启动http服务
启动HTTP服务后可在网页中直接获取接受的内容,这里只做了展示,需要看项目是否需要进行下一步处理json格式化或存入数据库等操作
http服务在Form1.cs窗体中可以找到
下载地址:点击下载
有需要的关注或评论区留言,谢谢记得先点个关注、点个免费的赞吼,期待后期更多资源对你有帮助
2021-10-02 修改:进群免费下载源码
记得先点个关注、点个免费的赞吼
记得先点个关注、点个免费的赞吼
记得先点个关注、点个免费的赞吼
-------------------------你点赞了吗?q群:906637114 你关注了吗?-------------------------
-
C# 网络通信开发训练实例
2011-03-20 17:47:23C# 网络通信开发训练-32个实例 C# 网络通信开发训练 实例01 更改计算机名称...... 670 实例02 通过计算机名获取IP地址...... 672 实例03 通过IP地址获取主机名称...... 673 实例04 修改本机IP地址...... 674... -
c#网络通信-ping技术实现.zip
2020-04-29 13:30:37c#网络通信-ping技术实现:实现了给定IP地址,实现ping该IP是否在线,以及TTL大小,是否分段。延时Delay显示等主要功能,供初学者使用,希望对大家有帮助。 -
c#网络通信、excel操作、多数据库操作的类库
2019-06-25 22:21:522.网络通信库可直接在项目中使用,不需要处理粘包等问题; 3.excel操作简单; 4.这些代码陆续维护了10多年; 5.自我感觉这些代码有些用,希望能帮到大家,也希望大家看后来挑毛病,互相学习; 6.有问题找Q-Q:... -
第10章C#网络通信编程技术.ppt
2020-11-16 11:02:40第10章 C#网络通信编程技术;10.1 网络通信的方式;10.2 Dns类;10.2 Dns类;10.2 Dns类;10.3 .Sockets命名空间;10.3.1 套接字Socket;10.3.2 Socket类的属性和方法;10.3.2 Socket类的属性和方法;10.4.2 TcpListener类;... -
ESFramework ——成熟的C#网络通信框架(跨平台)
2018-08-25 10:28:23ESFramework网络通信框架 是一套性能卓越、稳定可靠、强大易用的跨平台通信框架。也是.net平台首屈一指的成熟的C#网络通信框架。从最初的单纯的C#网络通信框架,历经10年,已经发展为支持包括原文地址为: ESFramework ——成熟的C#网络通信框架(跨平台)
ESFramework网络通信框架 是一套性能卓越、稳定可靠、强大易用的跨平台通信框架。也是.net平台首屈一指的成熟的C#网络通信框架。从最初的单纯的C#网络通信框架,历经10年,已经发展为支持包括安卓、IOS、Xamarin等多个平台的跨平台通信框架。其支持应用服务器集群。其内置了消息的收发与自定义处理(支持同步/异步模型)、消息广播、P2P通道、文件传送(支持断点续传)、心跳检测、断线重连、登录验证、在线用户管理、好友与群组管理、性能诊断等功能。基于ESFramework,您可以方便快捷地开发出诸如即时通讯系统(IM)、智慧医疗系统(远程诊疗)、网络教学系统、远程教育系统、视频会议系统等各种优秀的网络通信应用。此外,我们在长期实践中所积累的丰富经验,更将成为您强大的技术保障,从开发到上线直至后续运维,全程为您保驾护航,让您高枕无忧。具体而言,ESFramework 具有如下特性:(可跳过概要介绍,直接进入开发手册目录 或 Demo下载)
1.高性能C#网络通信框架
ESFramework底层使用IOCP模型,采用C#语言编写而成,数据收发与处理达到最高性能。当前主流配置的服务器(如至强4核双CPU、4-8G内存)可轻松处理10000个同时在线连接,每秒处理50000个以上的请求。当然,最终能达到的并发,更取决于具体应用的业务逻辑,如果业务逻辑复杂、处理单个请求都对CPU和内存的消耗都比较高,那么就会导致并发数下降,这时也许就要优化我们的业务逻辑代码了、或者使用更多的服务器来分担负载(比如迁移到ESPlatform)。关于ESFramework的性能测试的更多内容可以参见ESFramework 4.0 性能测试。
2.可靠、稳定
ESFramework通信框架起始于2004年,从0.1版本不断完善和优化到今天4.0版本已经有8年时间,其内核(ESFramework.dll)已经相当成熟稳定,所有已经发现的内核bug都已被解决,而且自2009年以来,没有新的内核的bug被发现。从最初的单纯的C#网络通信框架,历经10年,已经发展为支持包括安卓、IOS、Xamarin等多个平台的跨平台通信框架。另外,ESFramework只会在需要时才使用必要的资源(如CPU、内存),并且会及时释放持有的资源,不会有内存泄露等情况发生。如果您的业务逻辑代码没有bug,那么基于ESFramework的服务端正常运行一年,都不用重启一次。
3.功能强大丰富
现有的大多数通信框架仅仅解决了通信层的问题,而且几乎都是部分地解决。而ESFramework不仅仅完整地解决了通信层的需求,并且也解决了绝大多数通信系统中都关注的应用层的重要问题,这使得基于ESFramework开发分布式通信系统更迅速、更高效。
在通信层:ESFramework 支持TCP/UDP、文本协议/二进制协议、服务端/客户端以及它们组合的任意方式,并提供多种通信引擎供服务端开发人员和客户端开发人员使用。
在应用层:ESFramework 内置了在线用户管理、消息拦截、消息同步调用、回复异步调用、通道智能选择、客户端登录验证、心跳检测、消息优先级、断线自动重连、在线状态改变自动通知(好友与组友)、重登陆模式选择、完整的异常日志、文件传送(支持断点续传)、组广播、带ACK机制的信息发送、高效的二进制序列化器、等等功能。
在安全性:ESFramework 内置了常见的重要安全机制以防止恶意用户在应用层对服务端进行试探或攻击。这些机制有:消息格式完整验证、消息加密、验证未绑定的消息、绑定连接、关闭空连接等。
4.可靠的P2P通信
ESFramework提供了基于TCP和UDP的P2P通信(不仅是局域网,还支持广域网P2P通信),而且基于UDP的P2P做了增强,以保证基于UDP的P2P通信也像TCP一样可靠。在客户端之间需要高频通信的分布式系统中(如IM系统等),可靠的P2P通信将为您节省巨大的带宽和服务器成本。
5.高伸缩性的群集平台
ESPlatform平台支持基于ESFramework的应用程序的Cluster(群集),其内置了3种最常用的负载均衡策略。仅仅通过修改几行代码就可以将一个基于ESFramework的应用程序平滑迁入到ESPlatform平台中,以实现多台应用服务器的Cluster,从而应对日益增长的巨大并发。使用ESPlatform群集,我们可以非常方便地在运行时动态添加/移除应用服务器(AS)实例节点。
6.跨平台网络通信框架
跨平台是ESFramework网络通信框架的重要目标之一,ESFramework通过提供多平台的客户端引擎来实现这一点。其服务端由C#语言开发而成。基于ESFramework开发的不同平台的客户端之间可以相互通信,如此,异构环境将变得透明化。ESFramework已支持的平台如下图所示:
7.服务端性能诊断
ESFramework网络通信框架在服务端内置了性能跟踪诊断功能。如果基于ESFramework构建的服务端在运行时,遇到性能问题或某些故障,那么可以开启诊断功能,ESFramework将自动跟踪每种类型消息的处理情况,之后通过分析日志,就可以很快发现问题所在。
8.适用范围广
ESFramework 可以用于任何需要分布式通信的软件系统中,而且其群集功能还可以支持那些同时在线用户数巨大的系统。比如,即时通讯系统(IM),大型多人在线游戏(MMORPG)、在线网页游戏(WebGame)、文件传送系统(FTS)、数据采集系统(DGS)、分布式OA系统等等。
9.文档齐全、接口清晰规范
ESFramework提供的所有接口和API都具有良好的C#编码风格,与.NET Framework完全一致。我们提供了MSDN风格的帮助文档、Demo源码、ESFramework开发手册系列文章供您研究和学习使用ESFramework进行开发。
10.历史经验分享
我们在过去的10多年里,ESFramework从最初的单纯的C#网络通信框架,已经发展为支持包括安卓、IOS、Xamarin等多个平台的跨平台网络通信框架,早已是.net平台首屈一指的成熟的网络通信框架。我们团队在十多年间基于ESFramework开发了很多网络通信系统,也为诸多客户提供技术支持和运行故障排查服务,所以,在以下方面积累了丰富的经验:如基于ESFramework的最佳开发实践、服务端性能瓶颈排查、服务端运行故障排查、性能优化等等。如果您是第一次基于ESFramework进行二次开发,那么,我们分享的这些经验将为您的项目上线运行提供更强大的后续保障。
补充说明:关于ESFramework网络通信框架更详细的介绍,请参见详细说明。或转到 Demo下载
如果对您的项目来说,ESFramework太重量级,敬请了解轻量级通信引擎StriveEngine。
如果您需要开发网络语音视频通信相关的应用,敬请了解我的另一作品OMCS网络语音视频框架
版权声明:本文为博主原创文章,未经博主允许不得转载。
转载请注明本文地址: ESFramework ——成熟的C#网络通信框架(跨平台)
-
C# Socket网络通信
2019-02-16 11:44:05局域网通信,如果只用一台电脑机做服务器和客户端的话IP用127.0.0.1, 如局域网内一台电脑用做服务器一台电脑用做客户端则IP用服务器的IP号。 -
C#网络通信程序设计--基于TCP协议的程序设计.ppt
2020-02-24 13:46:01ppt课件 ppt课件 ppt课件 ppt课件 ppt课件 ppt课件 ppt课件 ppt课件 ppt课件 C#网络通信程序设计 第3章 基于TCP协议的程序设计 * ppt课件 本章的主要内容 学习内容 1了解TCP协议的特点与数据包格式 2理解阻塞模式和... -
轻量级C#网络通信组件StriveEngine —— C/S通信开源demo(附源码)
2017-09-05 18:44:29前段时间,有几个研究ESFramework网络通讯框架的朋友对我说,ESFramework有点庞大,对于他们目前的项目来说有点“杀鸡用牛刀”的意思,因为他们的项目不需要文件传送、不需要P2P、不存在好友关系、也不存在组广播、...转发连接: http://www.cnblogs.com/zhuweisky/p/3139801.html
前段时间,有几个研究ESFramework网络通讯框架的朋友对我说,ESFramework有点庞大,对于他们目前的项目来说有点“杀鸡用牛刀”的意思,因为他们的项目不需要文件传送、不需要P2P、不存在好友关系、也不存在组广播、不需要服务器均衡、不需要跨服务器网络通讯、甚至都不需要使用UserID,只要一个客户端能与服务端进行简单的稳定高效的C#网络通信组件就可以了。于是,他们建议我,整一个轻量级的C#网络通信组件来满足类似他们这种项目的需求。我觉得这个建议是有道理的,于是,花了几天时间,我将ESFramework的内核抽离出来,经过修改封装后,形成了StriveEngineC#网络通信组件,其最大的特点就是稳定高效、易于使用。通过下面这个简单的demo,我们应该就能上手了。文末有demo源码下载,我们先上Demo截图:
1.StriveEngineC#网络通信组件Demo简介
该Demo总共包括三个项目:
1.StriveEngine.SimpleDemoServer:基于StriveEngine开发的服务端。
2.StriveEngine.SimpleDemoClient:基于StriveEngine开发的客户端。
3.StriveEngine.SimpleDemo:直接基于.NET的Socket开发的客户端,其目的是为了演示:在客户端不使用StriveEngine的情况下,如何与基于StriveEngine的服务端进行网络通讯。
StriveEngine 内置支持TCP/UDP、文本协议/二进制协议,该Demo我们使用TCP、文本格式的消息协议,消息的结束符为"\0"。
2.StriveEngineC#网络通信组件Demo服务端
private ITcpServerEngine tcpServerEngine; private void button1_Click(object sender, EventArgs e) { try { //初始化并启动服务端引擎(TCP、文本协议) this.tcpServerEngine = NetworkEngineFactory.CreateTextTcpServerEngine(int.Parse(this.textBox_port.Text), new DefaultTextContractHelper("\0"));
this.tcpServerEngine.ClientCountChanged += new CbDelegate<int>(tcpServerEngine_ClientCountChanged); this.tcpServerEngine.ClientConnected += new CbDelegate<System.Net.IPEndPoint>(tcpServerEngine_ClientConnected); this.tcpServerEngine.ClientDisconnected += new CbDelegate<System.Net.IPEndPoint>(tcpServerEngine_ClientDisconnected); this.tcpServerEngine.MessageReceived += new CbDelegate<IPEndPoint, byte[]>(tcpServerEngine_MessageReceived); this.tcpServerEngine.Initialize(); this.button1.Enabled = false; this.textBox_port.ReadOnly = true; this.button2.Enabled = true; } catch (Exception ee) { MessageBox.Show(ee.Message); } } void tcpServerEngine_MessageReceived(IPEndPoint client, byte[] bMsg) { string msg = System.Text.Encoding.UTF8.GetString(bMsg); //消息使用UTF-8编码 msg = msg.Substring(0, msg.Length - 1); //将结束标记"\0"剔除 this.ShowClientMsg(client, msg); } void tcpServerEngine_ClientDisconnected(System.Net.IPEndPoint ipe) { string msg = string.Format("{0} 下线", ipe); this.ShowEvent(msg); } void tcpServerEngine_ClientConnected(System.Net.IPEndPoint ipe) { string msg = string.Format("{0} 上线" ,ipe); this.ShowEvent(msg); } void tcpServerEngine_ClientCountChanged(int count) { this.ShowConnectionCount(count); } private void ShowEvent(string msg) { if (this.InvokeRequired) { this.BeginInvoke(new CbDelegate<string>(this.ShowEvent), msg); } else { this.toolStripLabel_event.Text = msg; } } private void ShowClientMsg(IPEndPoint client, string msg) { if (this.InvokeRequired) { this.BeginInvoke(new CbDelegate<IPEndPoint,string>(this.ShowClientMsg),client, msg); } else { ListViewItem item = new ListViewItem(new string[] { DateTime.Now.ToString(), client.ToString(), msg }); this.listView1.Items.Insert(0, item); } } private void ShowConnectionCount(int clientCount) { if (this.InvokeRequired) { this.BeginInvoke(new CbDelegate<int>(this.ShowConnectionCount), clientCount); } else { this.toolStripLabel_clientCount.Text = "在线数量: " + clientCount.ToString(); } } private void comboBox1_DropDown(object sender, EventArgs e) { List<IPEndPoint> list = this.tcpServerEngine.GetClientList(); this.comboBox1.DataSource = list; } private void button2_Click(object sender, EventArgs e) { try { IPEndPoint client = (IPEndPoint)this.comboBox1.SelectedItem; if (client == null) { MessageBox.Show("没有选中任何在线客户端!"); return; } if (!this.tcpServerEngine.IsClientOnline(client)) { MessageBox.Show("目标客户端不在线!"); return; } string msg = this.textBox_msg.Text + "\0";// "\0" 表示一个消息的结尾 byte[] bMsg = System.Text.Encoding.UTF8.GetBytes(msg);//消息使用UTF-8编码 this.tcpServerEngine.SendMessageToClient(client, bMsg); } catch (Exception ee) { MessageBox.Show(ee.Message); } }关于服务端引擎的使用,主要就以下几点:
(1)首先调用NetworkEngineFactory的CreateTextTcpServerEngine方法创建引擎(服务端、TCP、Text协议)。
(2)根据需要,预定引擎实例的某些事件(如MessageReceived事件)。
(3)调用引擎实例的Initialize方法启动网络通讯引擎。
(4)调用服务端引擎的SendMessageToClient方法,发送消息给客户端。
3.StriveEngine C#网络通信组件Demo客户端
private ITcpPassiveEngine tcpPassiveEngine; private void button3_Click(object sender, EventArgs e) { try { //初始化并启动客户端引擎(TCP、文本协议) this.tcpPassiveEngine = NetworkEngineFactory.CreateTextTcpPassiveEngine(this.textBox_IP.Text, int.Parse(this.textBox_port.Text), new DefaultTextContractHelper("\0")); this.tcpPassiveEngine.MessageReceived += new CbDelegate<System.Net.IPEndPoint, byte[]>(tcpPassiveEngine_MessageReceived); this.tcpPassiveEngine.AutoReconnect = true;//启动掉线自动重连 this.tcpPassiveEngine.ConnectionInterrupted += new CbDelegate(tcpPassiveEngine_ConnectionInterrupted); this.tcpPassiveEngine.ConnectionRebuildSucceed += new CbDelegate(tcpPassiveEngine_ConnectionRebuildSucceed); this.tcpPassiveEngine.Initialize(); this.button2.Enabled = true; this.button3.Enabled = false; MessageBox.Show("连接成功!"); } catch (Exception ee) { MessageBox.Show(ee.Message); } } void tcpPassiveEngine_ConnectionRebuildSucceed() { if (this.InvokeRequired) { this.BeginInvoke(new CbDelegate(this.tcpPassiveEngine_ConnectionInterrupted)); } else { this.button2.Enabled = true; MessageBox.Show("重连成功。"); } } void tcpPassiveEngine_ConnectionInterrupted() { if (this.InvokeRequired) { this.BeginInvoke(new CbDelegate(this.tcpPassiveEngine_ConnectionInterrupted)); } else { this.button2.Enabled = false; MessageBox.Show("您已经掉线。"); } } void tcpPassiveEngine_MessageReceived(System.Net.IPEndPoint serverIPE, byte[] bMsg) { string msg = System.Text.Encoding.UTF8.GetString(bMsg); //消息使用UTF-8编码 msg = msg.Substring(0, msg.Length - 1); //将结束标记"\0"剔除 this.ShowMessage(msg); } private void ShowMessage(string msg) { if (this.InvokeRequired) { this.BeginInvoke(new CbDelegate<string>(this.ShowMessage), msg); } else { ListViewItem item = new ListViewItem(new string[] { DateTime.Now.ToString(), msg }); this.listView1.Items.Insert(0, item); } } private void button2_Click(object sender, EventArgs e) { string msg = this.textBox_msg.Text + "\0";// "\0" 表示一个消息的结尾 byte[] bMsg = System.Text.Encoding.UTF8.GetBytes(msg);//消息使用UTF-8编码 this.tcpPassiveEngine.SendMessageToServer(bMsg); }
关于客户端引擎的使用,与服务端类似:
(1)首先调用NetworkEngineFactory的CreateTextTcpPassiveEngine方法创建引擎(客户端、TCP、Text协议)。
(2)根据需要,预定引擎实例的某些事件(如MessageReceived、ConnectionInterrupted 事件)。
(3)根据需要,设置引擎实例的某些属性(如AutoReconnect属性)。
(4)调用引擎实例的Initialize方法启动网络通讯引擎。
(5)调用客户端引擎的SendMessageToServer方法,发送消息给服务端。
4.基于Socket的客户端
这个客户端直接基于.NET的Socket进行开发,其目演示了:在客户端不使用StriveEngineC#网络通信组件的情况下(比如客户端是异构系统),如何与基于StriveEngine的服务端进行网络通信。该客户端只是粗糙地实现了基本目的,很多细节问题都被忽略,像粘包问题、消息重组、掉线检测等等。而这些问题在实际的应用中,是必需要处理的。(StriveEngineC#网络通信组件中的客户端和服务端引擎都内置解决了这些问题)。
该客户端的代码就不贴了,大家可以在源码中看到。5.StriveEngine C#网络通信组件Demo源码下载
附相关系列: C#网络通信组件二进制网络通讯demo源码及说明文档
C#网络通信组件打通B/S与C/S网络通讯demo源码与说明文档
版权声明:本文为博主原创文章,未经博主允许不得转载。
-
C#网络通信——网络编程
2013-09-24 20:30:451.网络通信的方式 2.Dns类、IPAddress类、IPEndPoint类和IPHostEntry类 -
C# 网络通信Socket编程,客户端网络连接中断后,服务器出现卡的现象(已解决)
2019-09-23 15:07:44很久前编过一个基于C#的socket通信小软件,在测试过程中发现当通信客户端关闭或突然断开网络后,服务器端会不停的刷新连接,导致服务器端程序顿卡。 解决的方法很简单,加一行线程sleep代码即可。。。。。 服务器... -
c# 网络通信
2008-06-18 13:41:12利用visual studio 2005 c#编写的网络通信程序,服务器采用console, 客户端采用windows应用程序. -
C#网络通信技术基础知识
2011-08-01 10:09:22C#网络通信C#网络通信C#网络通信C#网络通信C#网络通信C#网络通信C#网络通信C#网络通信C#网络通信C#网络通信C#网络通信C#网络通信C#网络通信C#网络通信 -
C#网络通信源码全集合
2009-01-15 20:59:17C#网络通信源码全集合klmovPKdopgkdsl;afkogj -
C#网络通信编程技术
2014-04-08 10:16:21C#网络通信编程技术,C#.Net,TCP/IP协议类 -
unity c#实现简单前后端socket通信框架
2020-11-09 18:39:29博客:https://blog.csdn.net/u014261855/article/details/109583060 unity c#实现简单前后端socket通信框架 .net dll工程,封装三个工具: 1.服务器 2.客户端 3.通用byte流客户端 -
C#网络编程TCP通信实例
2018-08-23 15:10:17C#网络编程TCP通信实例 -
基于C#网络通信的实例源代码
2008-06-25 09:58:22基于C#网络通信,共享,上传数据...,可同时下载它的客户端的代码,此代码仅供学习使用 -
基于C#网络通信编程,SOCKET客户端与服务端通信协议的程序连
2013-01-09 15:41:12基于C#网络通信编程,SOCKET客户端与服务端通信协议的程序连