【.NET】Socket通信

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/It_sharp/article/details/83475045

TCP/IP模型概述

1、OSI参考模型把计算机网络通信定义为七层框架模型
2、后来出现了TCP/IP模型,分为四个层次
**链路层:**网络硬件
网络层: IP层,主要把分组发往目标网络或主机
传输层:
提供端到端的数据通信,它分为两个不同的协议:TCP和UDP。TCP提供有质量保证的端到端的数据传输、负责数据分组、质量控制和超时重发。
UDP则负责简单地把数据报从一端发送到另一端。是否到达、是否按时到达、是否损坏必须由应用层来控制
用途:TCP用于面向连接的应用,UDP在及时性服务中有重要用途,如网络多媒体通信。
应用层:
应用层负责处理实际的应用程序细节,主要包括一些协议。
基于TCP的有FTP、HTTP等,基于UDP的有SNMP。

NET网络编程

1、.NET框架为网络开发提供两个顶层命名空间:Sysetm.NET、System.Web同时又包含多个子命名空间。
常用的几个

命名空间 功能概述
System.Net 为当前网络上流行的多种协议提供一个统一、简单的编程接口。WebRequest和WebResponse类
System.Net.Sockets 为需要严格控制网络访问的开发人员提供Windows套接字接口的托管实现
System.Web Http输出(HttpResponse)和读取HttpRequest,额外的类则提供了一些功能,用于服务器端的实用程序以及进程、cookie管理、文件传输、异常信息和输出缓存控制
System.Web.Services 包含能够生成和使用XML Web service的类,这些服务是驻留在Web服务器中的可编程实体,并通过标准Internet协议公开

System.Net.Sockets命名空间主要类组成及功能
NetworkStream:为网络访问提供了基础数据流
Socket:实现了Berkeley套接字接口
TCPClient:为TCP网络服务提供了客户连接
TCPListener:用以监听TCP客户连接
UDPClient:用于提供UDP网络服务
System.Web命名空间的主要类组成及功能
HttpApplication:定义ASP.NET应用程序中所有应用程序对象的通用方法、属性和事件。
HttpApplicationState、HttpBrowserCapabilities
HttpContext:封装了所有关于HTTP请求的特定信息
HttpException:提供了生成HTTP异常的手段
HttpRequest:允许ASP.NET读取在Web请求中由客户发出的HTTP值
HTTPResponse:封装了来自一个ASP.NET操作的HTTP响应信息
HTTPUtility:为处理Web请求时的URL编码和解码提供了方法

套接字编程

Socket套接字是基于TCP协议上的一个抽象层。
服务端在一个总所周知的地址监听对服务的请求。也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务的地址监听对服务的请求。也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务的地址提出了连接请求。这个时刻,服务程序被“唤醒”并且为客户提供服务。服务器端程序执行如下:
1、打开一个通信通道并告知本地主机,它愿意在某一地址和端口上接收客户请求。
2、等待客户请求到达该端口。
3、接收到重复服务请求,处理该请求并发送应答信号。接收到并发服务请求,激活一个新的进程(或线程)来处理这个客户请求。新进程(或线程)处理此客户请求,并不需要对其他请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。
4、返回第二步,等待另一客户请求。
5、关闭服务器。
客户端:
1、打开一个通信通道,并连接到服务器所在主机的特定端口。
2、向服务器发服务请求报文,等待并接收应答;继续提出请求。
3、请求结束后关闭通信通道并终止。

Socket编程的通信方式

1、Socket进行编程时主要有4个概念,同步、异步、阻塞、非阻塞。其中,同步、异步时属于通信模式的概念,而阻塞、非阻塞则属于套接字模式的概念。
同步方式:
通信的同步,指客户端在发送请求后,不必等待服务端的回应就可以发送下一个请求。所以这个时候的所有请求将会在服务端得到同步。
异步方式:
通信的异步,指客户端在发送请求后,不必等待服务端的回应就可以发送下一个请求,这样对于所有的请求动作来说将会在服务端得到异步,这条请求的链路就像一个请求队列,所有的动作在这里不会得到同步。
阻塞方式:
阻塞套接字是指执行此套接字的网络调用时,所调用的函数只有在得到结果之后才会返回,在调用结果返回之前,当前线程会被挂起,即此套接字一直阻塞在网络调用上。比如调用StreamReader类的ReadLine()方法读取网络缓冲区的数据,如果调用的时候没有数据到达,那么此ReadLine( )方法将一直挂在调用上,直到读到一些数据,此函数才返回。
非阻塞方式:
非阻塞和阻塞的概念相对应,非阻塞套接字是在执行此套接字的网络调用时,即使不能立刻得到结果,该函数也不会阻塞当前线程,而会立刻返回。对于非阻塞套接字,同样调用StreamReader类的ReadLine()方法读取网络缓冲区的数据,不管是否读到数据都立刻返回,而不会一直挂在此函数调用上。
最常用的就是异步非阻塞套接字
套接字可以向Stream流一样被视为一个数据通道,这个通道架设在客户端应用程序和服务器端程序之间,数据的接收和写入均对这个通道来进行。因此要通过网络通信,就至少需要一对套接字。套接字之间的连接过程可以分为三个步骤:
1、服务器监听
2、客户端请求
3、连接确认
常用方法
1、Bind() 套接字绑定到特定地址
2、Listen() 完成地址的绑定后,使用Listen监听客服端发送的连接请求
3、Accept() 服务器进入监听状态,如有从客户端发来的连接请求,服务器使用Accept()方法来接收连接请求。并返回一个新的套接字,处理本连接的所有通信
4、Send() 发送数据
5、Receive() 接收数据
6、Connect()
7、Shutdown()
8、Close()

猜你喜欢

转载自blog.csdn.net/It_sharp/article/details/83475045