2023年7月15日发(作者:)
Visual C#套接字编程2007-11-19 14:54与套接字相关的类的简介
什么是套接字
Socket类以及其常用属性
Socket类常用方法
套接字编程示例
与套接字相关的类的简介
什么是套接字
应用层通过传输层进行数据通信时,会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。
区分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
套接字的使用分为两种模式:阻塞模式和非阻塞模式。阻塞模式也称为同步模式,在这种模式下,Socket操作直到全部操作完成后才返回。比如要接收数据包时,必须等到对方将数据包发送过来为止,调用Socket函数的线程在这期间是被挂起的,所以程序看起来好像是停止响应了。显然,要以这种方式执行Socket函数的话,几乎每个函数的使用都会引起程序“停止响应”的假象,所以必须考虑在不同的线程中执行每个Socket函数,这显然是比较麻烦的。
在BSD UNIX中,套接字是以阻塞模式执行的,这对以命令行方式执行的UNIX程序来说并不是问题,但阻塞模式不是很适合于Windows下的消息驱动体系,所以WinSock为所有的函数提供了非阻塞模式的版本,非阻塞模式又称异步模式,在这种模式下,一个函数执行后会立即返回,即使是操作还没有全部完成,但是当函数最终完成操作的时候,Socket接口会通过某种形式(如窗口消息)通知应用程序,显然这种方式非常适合于Windows下的消息驱动体系。一般来说,Socket接口强烈推荐程序员使用非阻塞模式进行通信编程,仅在绝对有必要的情况下才采用阻塞方式进行通信编程,因为非阻塞模式的操作能够更好地在Windows环境下进行。
Socket类以及其常用属性
Socket类为网络通信提供了一套丰富的方法和属性。所要求的命名空间为s。其常用属性如下表:
AddressFamily
受 .NET Framework 精简版的支持。获取 Socket 的地址族。
Available 受 .NET Framework 精简版的支持。获取已经从网络接收且可供读取的数据量。
Blocking
受 .NET Framework 精简版的支持。获取或设置一个值,该值指示 Socket 是否处于阻塞模式。
Connected
受 .NET Framework 精简版的支持。获取一个值,该值指示 Socket 是否已连接到远程主机。
Handle
受 .NET Framework 精简版的支持。获取 Socket 的操作系统句柄。
LocalEndPoint
受 .NET Framework 精简版的支持。获取本地终结点。
ProtocolType
受 .NET Framework 精简版的支持。获取 Socket 的协议类型。
RemoteEndPoint
受 .NET Framework 精简版的支持。获取远程终结点。
SocketType
受 .NET Framework 精简版的支持。获取 Socket 的类型。
SupportsIPv4 获取一个值,该值指示当前主机上是否拥有并已启用 IPv4 支持功能。如果当前主机支持 IPv4 协议,则为 true;如果不支持,则为 false。
SupportsIPv6 获取一个值,该值指示当前主机上是否拥有并已启用 IPv6 支持功能。如果当前主机支持 IPv6 协议,则为 true;如果不支持,则为 false。
Socket类常用方法
公共构造函数
Socket 构造函数
受 .NET Framework 精简版的支持。初始化 Socket 类的新实例。
注意:addressFamily参数指定 Socket 使用的地址家族,socketType参数指定 Socket 的类型,protocolType参数指定 Socket 使用的协议。这三个参数不是独立的。有些地址族会限制哪些协议可与其一起使用,同时 Socket 类型在协议中通常是隐式的。如果地址族、Socket
类型和协议类型的组合导致无效的 Socket,则此构造函数将引发SocketException。对于我们来讲,最常用的组合有:
Socket s = new Socket(etwork, , );
//定义了一个以TCP协议为通信协议的套接字
Socket s = new Socket(etwork, , );
//定义了一个以UDP协议为通信协议的套接字
公共方法
Accept
受 .NET Framework 精简版的支持。为新建连接创建新的 Socket。Accept 以同步方式从侦听套接字的连接请求队列中提取第一个挂起的连接请求,然后创建并返回新的Socket。在阻塞模式中,Accept 将会持续处于阻塞状态,直到传入的连接尝试进入队列。
注意:在调用 Accept 方法之前,必须首先调用 Listen 方法来侦听传入的连接请求,并将侦听到的请求放入队列中。
BeginAccept
受 .NET Framework 精简版的支持。开始一个异步操作来接受一个传入的连接尝试。面向连接的协议可以使用BeginAccept方法来异步处理传入的连接尝试。
必须创建实现AsyncCallback委托的回调方法,并将其名称传递给BeginAccept方法。要实现这一点,至少必须通过 state 参数把侦听 Socket 传递给BeginAccept。
BeginConnect
受 .NET Framework 精简版的支持。开始一个对远程主机连接的异步请求。
BeginReceive
受 .NET Framework 精简版的支持。开始从连接的 Socket 中异步接收数据。
BeginReceiveFrom
受 .NET Framework 精简版的支持。开始从指定网络设备中异步接收数据。
BeginSend
受 .NET Framework 精简版的支持。将数据异步发送到连接的 Socket。
BeginSendTo
受 .NET Framework 精简版的支持。向特定远程主机异步发送数据。
Bind
受 .NET Framework 精简版的支持。使 Socket 与一个本地终结点相关联。
Close
受 .NET Framework 精简版的支持。关闭 Socket 连接并释放所有关联的资源。
Connect
受 .NET Framework 精简版的支持。建立与远程主机的连接。
EndAccept
受 .NET Framework 精简版的支持。异步接受传入的连接尝试,并创建新的 Socket 来处理远程主机通信。
EndConnect
受 .NET Framework 精简版的支持。结束挂起的异步连接请求。
EndReceive
受 .NET Framework 精简版的支持。结束挂起的异步读取。
EndReceiveFrom
受 .NET Framework 精简版的支持。结束挂起的、从特定终结点进行异步读取。
EndSend
受 .NET Framework 精简版的支持。结束挂起的异步发送。
EndSendTo
受 .NET Framework 精简版的支持。结束挂起的、向指定位置进行的异步发送。
Equals(从 Object 继承)
受 .NET Framework 精简版的支持。已重载。确定两个 Object 实例是否相等。
GetHashCode
受 .NET Framework 精简版的支持。已重写。参见hCode。
GetSocketOption
受 .NET Framework 精简版的支持。已重载。返回 Socket 选项的值。
GetType(从 Object 继承) 受 .NET Framework 精简版的支持。获取当前实例的 Type。
IOControl
受 .NET Framework 精简版的支持。为 Socket 设置低级别操作模式。
Listen
受 .NET Framework 精简版的支持。将 Socket 置于侦听状态。
Poll
受 .NET Framework 精简版的支持。确定 Socket 的状态。
Receive
受 .NET Framework 精简版的支持。已重载。接收来自绑定的 Socket 的数据。
ReceiveFrom
受 .NET Framework 精简版的支持。已重载。接收数据文报并存储源终结点。
Select
受 .NET Framework 精简版的支持。确定一个或多个套接字的状态。
Send
受 .NET Framework 精简版的支持。已重载。将数据发送到连接的 Socket。
SendTo
受 .NET Framework 精简版的支持。已重载。将数据发送到特定终结点。
SetSocketOption
受 .NET Framework 精简版的支持。已重载。设置 Socket 选项。
Shutdown
受 .NET Framework 精简版的支持。禁用某 Socket 上的发送和接收。
ToString(从 Object 继承)
受 .NET Framework 精简版的支持。返回表示当前 Object 的 String
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689407842a243178.html
评论列表(0条)