ASP.NET Socket网络编程
1.Socket相关概念
(1) Socket的英文原义是“孔”或者“插座”,作为进程通信机制,取后一种意思,通常也称作“套接字”,用于藐视IP地址和端口,是一个通信链的句柄(其实就是两个程序通信用的)。
(2) Socket非常类似于电话插座,以一个电话网为例,电话的通话双方相当于相互通信的2个程序,电话号码就是IP地址,任何用户在通话之前,首先要占有一部电话机,相当于申请一个Socket;同时要知道对方的电话号码,相当于对方有一个固定的Socket,然后向对方拨号呼叫,相当于发出连接请求,对方假如在场并且空闲,拿起电话话筒,双方就可以正式通话,相当于连接成功,双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向Socket发送数据和从Socket接收数据,通话结束后,一方挂起电话机相当于关闭Socket,撤销连接
(3) 在Internet上面有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务(应用程序)。
(4) 例如:http使用80端口,ftp使用21端口,smtp使用23端口。
(5) 有两种类型的Socket
1) 流式Socket(Stream)
是一种面向连接的Socket,针对于面向连接的TCP服务应用,安全,但是效率低。
2) 数据报式Socket(Datagram)
是一种无连接的Socket,对应于无连接的UDP服务应用,不安全(丢失,顺序混乱,在接收端要分析重排及要求重发),但是效率高。
2. Socket一般应用模式(服务器端和客户端)
(1) 如图所示,分析图示:
(2) 说明:
1) 服务端welcoming socket开始监听端口(负责监听客户端连接信息)。
2) 客户端client socket连接服务端指定端口(负责接收和发送服务器端消息)
3) 服务器端监听到客户端连接,创建connection socket(负责和客户端通信)
(3) 服务器端的Socket(至少需要两个)
1) 一个负责接收客户端连接请求(但不负责和客户端通信)
2) 每成功接收到一个客户端的连接便在服务器端产生一个对应的Socket。
1) 在接收到客户端连接时创建
2) 为每个连接成功的客户端请求在服务器端都创建一个对应的Socket(负责和客户端通信)。
(4) 客户端的Socket
1)客户端Socket
1) 必须指定要连接的服务器端地址和端口。
2) 通过创建一个Socket对象来初始化一个到服务器端的TCP连接。
- Socket的通讯过程
(1) 服务器端
1) 申请一个Socket。
2) 绑定到一个IP地址和一个端口上。
3) 开启侦听,等待接收数据。
(2) 客户端
1) 申请一个Socket。
2) 连接服务器(指明IP地址和端口号)
3) 服务器端连接到连接请求后,产生一个新的Socket(端口大于1024)于客户端建立连接并进行通讯,原侦听Socket继续侦听。如图所示:
- Socket的构造函数
(1) 连接通过构造函数完成
(2) public Socket(AddressFamily address,SocketType socket,ProtocolType protocol)
1) AddressFamily成员指定Socket用来解析地址的寻址方案。例如:
InterNetWork相当于Socket使用一个IP版本4地址连接。
2) SocketType定义要打开的Socket的类型。
3) Socket类使用ProtocolType枚举向Windows Socket API通知所请求的协议
如:mySocket=new Socket(AddressFamily.InterNetWork,SocketType.Stream,ProtocolType.TCP);
(3) 注意:
1) 至少要定义一个要连接的远程主机的IP和端口号
2) 端口号必须为1和65535之间,最好在1024之后。
3) 要连接的远程主机必须正在监听指定端口,也就是说你无法随意连接远程主机。
如:IPAddress addr=IPAddress.Parse(10.10.4.200);
IPEndPoint endp=new IPEndPoint(addr,10001);
服务端先绑定:serverWelcomeSocket.Bind(endp);
客户端在连接:ClientSocket.Connect(endp);
- Socket的方法
(1) 相关类
1) IPAddress类:包含了一个IP地址
2) IPEndPoint类:包含了一对IP地址和端口号
(2) 相关方法
1) Socket():创建一个Socket。
2) Bind():绑定一个本地的IP和端口号(IPEndPoint)
3) Listen():让Socket侦听传入的连接尝试,并指定侦听队列容量。
4) Connect():初始化与另外一个Socket的连接。
5) Accept():接收连接并且返回一个新的Socket。
6) Send():输出数据到Socket。
7) Receive():从Socket中读取数据。
8) Close():关闭Socket(销毁连接)
初心商城:初心商城
作者:韩迎龙(Kencery) MVC/.NET群:159227188如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏一杯咖啡,本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!