C#通讯之网络通讯
1。网络协议理论:(七层网络框架,TCP协议,UDP协议,工业行业协议等)
2。网络协议重要理论:(TCP建立连接时三次握手,TCP释放连接时的四次挥手,TCP与UDP基本区别等)
3。各种网络通讯技术点实战:(Socket通讯、TCP通讯、UDP通讯)
通过客户端实例client可以拿到几个重要信息:
拿服务器身份:client.LocalEndPoint
拿客户端身份:client.RemoteEndPoint
拿可供读取的数据字节数:client.Available
拿客户端连接状态:client.Connected
客户端使用哪种寻址方案和服务器通讯的:client.AddressFamily
客户端使用哪种协议类型和服务器通讯的:client.ProtocolType
客户端使用哪种Socket类型和服务器通讯的:client.SocketType
客户端最大能接收的数据字节数:client.ReceiveBufferSize
客户端最大能发送的数据字节数:client.SendBufferSize
客户端接收数据时的超时时间:ReceiveTimeout 超时值(以毫秒为单位)。 默认值为 0,指示超时期限无限大。
客户端发送数据时的超时时间:SendTimeout 超时值(以毫秒为单位)。 默认值为 0,指示超时期限无限大。
如下是通讯理论中要掌握的理论部分
A。网络通讯重点:
1。七层网络协议?各层重要的协议?TCP和UDP属于哪一层?HTTP属于哪一层?IP协议属于哪一层?
2。Socket通讯,TCP通讯,UDP通讯概念、特点,应用场景?
3。Socket通讯,TCP通讯,UDP通讯流程描述,根据流程图要能口述?
4。描述TCP/HTTP通讯三次握手?四次挥手?
B。其他网络通讯及相关知识点了解:asp.net web api
1。HTTP协议,HTTPS协议概念,特点,应用场景?
2。什么是URL?URL组成部分有哪些?什么是URI?它俩有何关系?
3。什么是DNS?
4。邮箱协议叫什么名称?
5。上传协议叫什么名称?
问:数据库通讯使用的哪种协议?TCP协议
数据库连接时使用端口?1433
MySQL另外关系型数据库?3306
HTTP协议默认端口80
HTTPS协议默认端口443
FTP协议默认端口21
主要内容:C#通讯之网络通讯
1。使用Socket TCP配合Modus TCP/IP直接向设备发送报文
2。使用NModbus4配合Modbus TCP/IP直接向设备发送报文
上面的两种总结:上位机软件(Socket TCP,NModbus4) 直接 设备通讯
3。Socket TCP发送数据帧到服务器,服务器转发到设备
4。Socket练习:Socket和空气质量变送器设备通讯(串口+网口)
第3条和第4条都是需要转发:
没有和设备直接通讯。把上位机软件 看成通讯其中一个客户端,把设备看成另外一个客户端。相当于两个客户端之间的通讯。
上位机软件通过串口把数据帧发送服务器,服务器再把数据帧通过串口转发给设备,设备收到串口数据帧后,会给出响应报文,把响应报文给服务器,服务器再把响应报文转发上位机软件 。
TCP/IP协议簇:一组协议
Socket TCP和设备通讯分如下两种情况:
a. 设备直接当成服务器(不需要服务器转发,但需要注意ModbusTCP报文结构与串口ModbusRTU区别)
b. 设备当成一个客户端的情况(需要服务器转发)
A。Socket要访问设备步骤:(不经过服务器转发)
1。Socket客户端把请求报文,直接发给设备
2。开线程等待设备的响应报文
提示:这种方式,一定要注意Modbus TCP报文和Modbus RTU报文结构区别。
B.。Socket要访问设备步骤:(经过服务器转发)
1。Socket客户端A把请求报文,先发给服务器
2。Socket服务器把Socket客户端A请求报文转发到设备(通过串口转发的)
3。设备响应报文,并把响应报文回传到Socket服务器(说明设备和服务器之间是走的串口通讯)
4。Socket服务器再把设备响应报文回转到Socket客户端A
C。串口转网口的服务器主要职责:
1。服务器把客户端的请求报文接收到(网口)
2。服务器把接收到的请求报文转换到设备(串口)
3。设备把响应报文通过串口传递给服务器(串口)
4。服务器再把响应报文传递给客户端(网口)
计算机系统中的大端(Big-Endian)和小端(Little-Endian):
https://blog.csdn.net/chongjian1990/article/details/149027534
C#short 、ushort、 byte、 byte[]转换分析:
https://blog.csdn.net/qq_59062726/article/details/136805567
Modbus TCP协议:要求对Modbus RTU和Modbus TCP的报文结构熟悉
https://blog.csdn.net/mmmjsjsk/article/details/142655263
主要内容:C# Socket之UDP通讯
1。Socket UDP通讯流程讲解
2。Socket UDP主要API讲解
3。Socket UDP实现客户端和服务器通讯
4。Socket UDP实现和设备通讯
5。理论补充(TCP,UDP协议概念及特点,二者区别,三次握手,四次挥手)
Socket UDP充当服务器时使用步骤:
a. 实例化一个Socket
b. 绑定一个IP和Port
c. 然后就可以通讯
Socket UDP充当客户端时使用步骤:
a. 实例化一个Socket
b. 然后就可以通讯
但是UDP通讯的两端其实地位是相同的。
使用Socket UDP和设备通讯也分两种情况:
第一种情况:
1。软件端(UDP客户端),先把请求报文,发给服务器(还是UDP客户端)【网口】
2。服务器,把请求报文,通过串口转发到 设备端 【串口】
3。设备端,把响应报文,通过串口传递到 服务器端【串口】
4。服务器,把响应报文,通过网口转发到 软件端【网口】
第二种情况:
1。设备当成UDP一端。
2。软件当成UDP另外一端。
3。两端直接通讯。
UDP广播:
广播消息的目的IP地址是一种特殊IP地址,称为广播地址。
广播地址由IP地址网络前缀加上全1主机后缀组成,
如:
192.168.1.255是192.169.1.0这个网络的广播地址;
130.168.255.255是130.168.0.0这个网络的广播地址。
向全部为1的IP地址(255.255.255.255)发送消息的话,那么理论上全世界所有的联网的计算机都能收得到了。
广播端:广播一条消息,广播地址:是一个IP段。
广播消息很多客户端都能收到。但很多客户端需要限定在一定范围内。如果不限定,会出现你在你电脑发一条消息,世界上所有的电脑都有收到。
文档:
https://blog.csdn.net/zyzBulus/article/details/88106414
c# socket udp广播
https://www.cnblogs.com/zhangbaochong/p/4944894.html
https://www.jb51.net/article/284469ptw.htm
1。协议概念简述?
TCP:Transmission Control Protocol传输控制协议,是一种面向连接的、可靠的、有序的,基于字节流的传输层通信协议。
UDP:User Datagram Protocol用户数据报协议,是一种无需连接、不可靠、无序的,面向数据报的传输层通信协议。
Socket:套接字,是【应用层与TCP/IP协议簇通信的中间软件抽象层】。将传输层封装后便与应用层更方便的调用。
由于Socket是对TCP/IP组协议一个高度封装(抽象),造成开发者在使用不同协议时,容易把API搞混乱。
把创建服务器的Socket API封装到TCPListener类中,把创建客户端的Socket API 封装到TCPClient。
如果使用UDP通讯,Socket API封装到UDPClient。
2。TCP与UDP基本区别?
a. TCP基于连接,UDP无需连接。
b. TCP要求系统资源较多,UDP较少。
c. UDP程序结构较简单。
d. 流模式(TCP)与数据报模式(UDP)。
e. TCP保证数据正确性,UDP可能丢包。
f. TCP保证数据顺序,UDP不保证。
3。Socket UDP通讯流程?
(1).建立一个套接字(Socket)
(2).绑定服务器端IP地址及端口号–服务器端
(3).通过SendTo()方法向指定主机发送消息(需提供主机IP地址及端口)
(4).通过ReciveFrom()方法接收指定主机发送的消息(需提供主机IP地址及端口)

主要内容:C#网络编程之Socket|TcpListenter和TcpClient (常用)
Socke嵌套字,是对TCP/IP协议的抽象,它内部分两种主要通讯:TCP,UDP。
回顾Socket要访问设备步骤:其实是两个客户端之间的通讯:客户端A(软件),客户端B(设备),服务器C
1。客户端和服务器连接成功后。
2。Socket客户端先把请求报文发给服务器。
3。服务器再把请求报文转发到设备。
4。设备响应报文之后,并把响应报文回传到服务器。
5。服务器再把响应报文回转到Socket客户端。
回顾串口要访问设备步骤:
1。串口和设备连接成功后。Open()
2。串口直接向设备发送请求报文。 serialPort.Write()
3。设备把响应的报文直接回传到串口。serialPort_Data_Received事件
多线程肯定是异步执行的,但异步不一定是多线程。
async和await回顾:
1。async定义的方法称为异步方法。
2。await只能配合async来使用。
3。await提高用户体验,不阻塞,卡顿。它不会提升性能。
4。await让代码执行有顺序,这点和同步代码一样。await以同步代码的方式编写的是异步代码。
5。await等待的结果必须是一个Task或Task<T>。不能等待void。
是否等待异步的结果,有一个规律:
1。看结果是否被下方其他代码使用,如果被使用,必须await。
2。如果异步的结果没有被使用,可以不await。但如果想让代码执行有顺序,也必须等待。
3。await 等待的代码,和同步的代码一样。
流对象:
FileStream, Stream, StringWriter,StringReader, BinaryStream,NetworkStream等
TCPListener和TCPClient通讯:
https://www.toutiao.com/article/7269608473183322643
https://www.cnblogs.com/wxhao/p/13636401.html
https://www.cnblogs.com/seabluescn/p/12972632.html
https://blog.csdn.net/zhujunxxxxx/article/details/44261497
https://www.toutiao.com/article/7194274780433269303
TCP通讯过程:
https://blog.csdn.net/weixin_44899642/article/details/129749935
Modub TCP报文结构:
https://blog.csdn.net/mmmjsjsk/article/details/142655263
1.TcpClient、TcpListener和Socket的使用比较?
a. 创建连接:使用Socket类时,需要手动创建Socket对象并指定协议类型(如TCP或UDP)、本地IP地址和端口号。而TcpClient类则是专门用于创建TCP客户端连接的,它封装了Socket类的一部分功能,并提供了更高层次的方法来处理连接、发送和接收数据。
b. 服务器监听:使用Socket类时,需要手动监听连接请求并创建新的Socket对象来处理每个客户端连接。而TcpListener类则是用于创建TCP服务器监听的,它封装了Socket类的一部分功能,并提供了更高层次的方法来处理客户端连接请求和接收数据。
c. 复杂性:使用Socket类时,需要手动处理底层的网络通讯细节,包括数据的分包和组包、错误处理等。而TcpClient和TcpListener提供了更简单、更高级别的API来实现TCP通信,隐藏了这些底层细节,并提供了更方便的方法来发送和接收数据。
总结来说,TcpClient和TcpListener提供了更简单、更高级别的API来实现TCP通信。它们封装了【Socket类的一部分功能】,隐藏了底层的网络通讯细节,使得开发人员可以更专注于业务逻辑的实现,而不必过多关注网络编程的复杂性。
2. 重要API?
a.实例化
TcpListener server = new TcpListener(ip,port);
TcpClient tcpClient = new TcpClient();
b.启动侦听,建立连接
server.Start()
tcpClient.Connect(ip,port);
c.等待连接,接收数据,数据量,拿Socket(IP和Port)
TcpClient client = server.AcceptTcpClient()
stream.DataAvailable或client.Available判断是否有可用数据,有返回true
client.Available客户端发送的数据量(字节数)
Task,任务Token,取消任务,跨线程访问控件使用Invoke()
NetworkStream stream = client.GetStream() // Stream
stream.Read(buffer, 0, buffer.Length)
client.Client属性拿到客户端对应的Socket实例。
client.Client.RemoteEndPoint拿客户端的IP和端口。
client.Client.LocalEndPoint拿服务器的IP和端口。
d.发送数据
NetworkStream stream = client.GetStream()
stream.Write(buffer, 0, buffer.Length)
e.关闭
server.Stop()
client.Close()
cts.Cancel()
根据上面的重要点,梳理API。
IPEndPoint类,EndPoint类主要控制IP地址和端口
TcpListener.LocalEndpoint
更多推荐


所有评论(0)