C# Socket 编程

EndPoint 类编程

标识网络地址。这是一个 abstract 类。浏览器

命名空间:  System.Net
程序集:  System(在 System.dll 中)缓存

[SerializableAttribute]
public abstract class EndPoint安全

备注网络

EndPoint 类提供了一个表示网络资源或服务的 abstract 基类。子类组合网络链接信息以构成服务的链接点。异步

继承层次结构

System.Object
System.Net.EndPoint
System.Net.IPEndPoint性能

Socket.Bind 方法操作系统

使 Socket与一个本地终结点相关联。线程

命名空间:  System.Net.Sockets
程序集:  System(在 System.dll 中)对象

public void Bind(EndPoint localEP )
参数
localEP
类型: System.Net.EndPoint

要与 Socket关联的本地 EndPoint

异常
ArgumentNullException

localEP 为 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing)。

SocketException

试图访问套接字时发生错误。有关更多信息,请参见备注部分。

ObjectDisposedException

Socket已关闭。

SecurityException

调用堆栈上部的调用方无权执行所请求的操做。

备注

若是须要使用特定的本地终结点,请使用 Bind 方法。必须先调用 Bind,而后才能调用 Listen方法。除非须要使用特定的本地终结点,不然没必要在使用 Connect方法以前调用 Bind。对无链接和面向链接的协议均可以使用 Bind 方法。

在调用 Bind 以前,必须首先建立打算从其进行数据通讯的本地 IPEndPoint。若是您不介意分配哪一个本地地址,则能够用 IPAddress.Any做为地址参数建立一个 IPEndPoint,这样,基础服务提供程序将会分配最适合的网络地址。若是您有多个网络接口,这将有助于简化您的应用程序。若是您不介意使用哪一个本地端口,则能够建立一个使用 0 做为端口号的 IPEndPoint。在这种状况下,服务提供程序将会分配一个可用的端口号(介于 1024 和 5000 之间)。

若是使用上面的方法,您能够经过调用 LocalEndPoint获知所分配的本地网络地址和端口号。若是当前使用的是面向链接的协议,则直到您调用了 Connect或 EndConnect方法后,LocalEndPoint才会返回本地分配的网络地址。若是当前使用的是无链接协议,则直到完成一个发送或接收操做后,才可访问该信息。

注意:

若是打算接收多路广播的数据报,则必须使用多路广播端口号调用 Bind 方法。

注意:

若是打算经过使用 ReceiveFrom方法来接收无链接的数据报,则必须调用 Bind 方法。

注意:

若是在调用 Bind 方法时接收到 SocketException,则可使用 SocketException.ErrorCode属性获取特定的错误代码。获取此代码后,您能够参考 MSDN Library 中的 Windows Sockets 第 2 版 API 错误代码文档,获取有关该错误的详细说明。

注意:

当在应用程序中启用网络跟踪功能后,此成员将输出跟踪信息。有关更多信息,请参见 网络跟踪。

Socket.Listen 方法

将 Socket置于侦听状态。

命名空间:  System.Net.Sockets
程序集:  System(在 System.dll 中)

public void Listen(
int backlog
)

参数
backlog
类型:System.Int32

挂起链接队列的最大长度。

异常
SocketException

试图访问套接字时发生错误。有关更多信息,请参见备注部分。

ObjectDisposedException

Socket已关闭。

备注

Listen 可让一个面向链接的 Socket侦听传入的链接尝试。backlog 参数指定队列中最多可容纳的等待接受的传入链接数。若要肯定可指定的最大链接数,请检索 MaxConnections值。Listen 不会阻止。

若是收到 SocketException,请使用 ErrorCode属性获取特定的错误代码。获取此代码后,您能够参考 MSDN Library 中的 Windows Sockets 第 2 版 API 错误代码文档,获取有关该错误的详细说明。可以使用 AcceptBeginAccept来接受来自队列的链接。

注意:

在调用 Listen 以前,必须首先调用 Bind方法,不然 Listen 将引起 SocketException

注意:

当在应用程序中启用网络跟踪功能后,此成员将输出跟踪信息。有关更多信息,请参见 网络跟踪。

注意:

根据操做系统的不一样,backlog 参数被限制为不一样的值。您能够指定更大的值,但 backlog 将受操做系统的限制。

 

Socket.BeginAccept 方法

开始一个异步操做来接受一个传入的链接尝试。

重载列表

BeginAccept(AsyncCallback, Object)
开始一个异步操做来接受一个传入的链接尝试。

BeginAccept(Int32, AsyncCallback, Object)
开始异步操做以接受传入的链接尝试并接收客户端应用程序发送的第一个数据块。

BeginAccept(Socket, Int32, AsyncCallback, Object)
开始异步操做以接受从指定套接字传入的链接尝试并接收客户端应用程序发送的第一个数据块。

命名空间:  System.Net.Sockets
程序集:  System(在 System.dll 中)

语法

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)] public IAsyncResult BeginAccept( AsyncCallback callback, Object state )
参数
callback
类型:System.AsyncCallback

AsyncCallback 委托。

state
类型:System.Object

一个对象,它包含此请求的状态信息。

返回值

类型:System.IAsyncResult

一个 IAsyncResult,它引用异步 Socket建立。

异常

 

ObjectDisposedException

Socket对象已关闭。

NotSupportedException

此方法须要 Windows NT。

InvalidOperationException

正在接受的套接字不会侦听链接。在调用 BeginAccept以前必须调用 Bind和 Listen

- 或 -

已接受的套接字是绑定的。

ArgumentOutOfRangeException

receiveSize 小于 0。

SocketException

试图访问套接字时发生错误。有关更多信息,请参见备注部分。

备注

注意:

应用到此 的 HostProtectionAttribute 属性 (attribute) 具备如下 Resources 属性 (property) 值:ExternalThreading。HostProtectionAttribute 不影响桌面应用程序(这些应用程序一般经过双击图标、键入命令或在浏览器中输入 URL 来启动)。有关更多信息,请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护属性。

面向链接的协议可使用 BeginAccept方法来异步处理传入的链接尝试。以异步方式接受链接将使您可以在单独的执行线程中发送和接收数据。在调用 BeginAccept方法以前,必须调用 Listen方法来侦听传入的链接请求,并将侦听到的请求放入队列中。

必须建立实现 AsyncCallback 委托的回调方法,并将其名称传递给 BeginAccept方法。若要实现这一点,至少必须经过 state 参数将实施侦听的 Socket对象传递给 BeginAccept。若是您的回调须要更多信息,则能够建立一个小型类来保存 Socket和其余必需的信息。经过 state 参数将此类的一个实例传递给 BeginAccept方法。

回调方法应调用 EndAccept方法。应用程序调用 BeginAccept时,系统会使用单独的线程执行指定的回调方法,并在 EndAccept上一直处于阻止状态,直到检索到挂起的链接。EndAccept将会返回新的 Socket对象,供您用来向远程主机发送数据和从远程主机接收数据。不能使用返回的这个 Socket接受链接队列中的任何附加链接。若是想要在调用 BeginAccept方法后使原始线程阻止,请使用 WaitHandle..::.WaitOne。当须要原始线程继续执行时,请在回调方法中调用 ManualResetEvent 的 Set 方法。有关编写回调方法的其余信息,请参见 Callback 示例。

注意:

能够调用返回的 Socket的 RemoteEndPoint方法来标识远程主机的网络地址和端口号。

注意:

若是收到 SocketException,请使用 SocketException..::.ErrorCode属性获取特定的错误代码。获取此代码后,能够参考 MSDN 中的 Windows Sockets 第 2 版 API 错误代码文档,获取有关此错误的详细说明。

注意:

当在应用程序中启用网络跟踪功能后,此成员将输出跟踪信息。有关更多信息,请参见 网络跟踪。

注意:

执行上下文(安全上下文、模拟用户及调用上下文)会被缓存,以用于 Socket异步方法。在首次使用一个特定上下文(特定 Socket异步方法、特定 Socket实例及特定回调)后,该上下文的后续使用将获得性能改

Socket.EnableBroadcast 属性

获取或设置一个 Boolean 值,该值指定 Socket是否能够发送或接收广播数据包。

命名空间:  System.Net.Sockets
程序集:  System(在 System.dll 中)

语法

public bool EnableBroadcast { get; set; }
属性值

类型:System.Boolean

若是 Socket容许广播数据包,则为 true;不然为 false。默认为 false。

异常

SocketException

此选项仅对数据报套接字有效。

ObjectDisposedException

Socket已关闭。

备注

广播仅限于特定子网,而且必须使用用户数据报协议 (UDP)。对于 Internet 协议版本 4,可经过向 255.255.255.255 发送数据包来向本地子网广播;也可使用定向广播地址,即 Internet 协议 (IP) 地址的网络部分,同时全部位都在主机部分设置。例如,若是 IP 地址是 192.168.1.40(C 类地址,网络掩码为 255.255.255.0,网络部分是前三个八进制数,主机部分是最后一个八进制数),则您的定向广播地址是 192.168.1.255。

对传输控制协议 (TCP) 套接字设置此属性不起任何做用。

相关文章
相关标签/搜索