#unity/日常积累

Socket.ConnectAsync 方法

  • 参考

反馈

定义

命名空间:

System.Net.Sockets

程序集:

System.Net.Sockets.dll

开始一个对远程主机连接的异步请求。

ConnectAsync(SocketType, ProtocolType, SocketAsyncEventArgs)

Source:

Socket.cs

1
public static bool ConnectAsync (System.Net.Sockets.SocketType socketType, System.Net.Sockets.ProtocolType protocolType, System.Net.Sockets.SocketAsyncEventArgs e);

参数

socketType

SocketType

SocketType 值之一。

protocolType

ProtocolType

ProtocolType 值之一。

e

SocketAsyncEventArgs

要用于此异步套接字操作的 SocketAsyncEventArgs 对象。

返回

Boolean

如果 I/O 操作挂起,则为 true。 操作完成时,将引发 e 参数的 Completed 事件。

如果 I/O 操作同步完成,则为 false。 在这种情况下,将不会引发 e 参数的 Completed 事件,并且可能在方法调用返回后立即检查作为参数传递的 e 对象以检索操作的结果。

例外

ArgumentException

自变量无效。 如果指定了多个缓冲区,即 BufferList 属性不为 null,将会发生此异常。

ArgumentNullException

e 参数不能为 null,并且 RemoteEndPoint 不能为空。

InvalidOperationException

Socket 正在侦听或已经在使用 e 参数中指定的 SocketAsyncEventArgs 对象执行套接字操作。

SocketException

尝试访问套接字时出错。

NotSupportedException

本地终结点和 RemoteEndPoint 不是同一个地址系列。

ObjectDisposedException

Socket 已关闭。

SecurityException

调用堆栈中的较高调用方无权执行所请求的操作。

注解

如果使用面向连接的协议,则 M:System.Net.Sockets.Socket.ConnectAsync (System.Net.Sockets.SocketType,System.Net.Sockets.ProtocolType,System.Net.Sockets.SocketAsyncEventArgs) 方法启动与远程主机连接的异步请求。 如果使用无连接协议, ConnectAsync 将建立由 socketType 和 protocolType 参数指定的默认远程主机。

若要收到完成通知,必须创建实现 EventHandler 委托的回调方法,并将回调附加到 SocketAsyncEventArgs.Completed 事件。

调用方必须将 属性设置为SocketAsyncEventArgs.RemoteEndPointIPEndPoint要连接到的远程主机的 。

调用方可以在调用ConnectAsync方法之前将 SocketAsyncEventArgs.UserToken 属性设置为所需的任何用户状态对象,以便可在回调方法中检索信息。 如果回调需要比单个对象更多的信息,则可以创建一个小类来保存其他所需的状态信息作为成员。

如果使用 UDP 等无连接协议,则不必在发送和接收数据之前调用 ConnectAsync 。 可以使用 SendToAsync 和 ReceiveFromAsync 与远程主机通信。 如果确实调用 ConnectAsync,则将放弃从指定默认值以外的地址到达的任何数据报。 如果要更改默认远程主机,请使用所需的终结点再次调用 ConnectAsync 方法。

如果要将默认远程主机设置为广播地址,必须首先调用 SetSocketOption 并将 Broadcast 设置为 true。 如果未完成此操作,该方法 ConnectAsync 将引发 SocketException

对象需要 System.Net.Sockets.SocketAsyncEventArgs 以下属性和事件:

(可选)可以提供缓冲区,该方法成功后 ConnectAsync 将在套接字上以原子方式发送。 在这种情况下,需要将 SocketAsyncEventArgs.Buffer 属性设置为包含要发送的数据的缓冲区, SocketAsyncEventArgs.Count 而 属性需要设置为要从缓冲区发送的数据的字节数。 建立连接后,发送此数据缓冲区。

如果使用面向连接的协议,并且未在调用 ConnectAsync之前调用 Bind ,则基础服务提供商将分配最合适的本地网络地址和端口号。

如果使用无连接协议,则在你调用 SendAsync 或 ReceiveAsync 方法之前,服务提供商不会分配本地网络 IP 地址和端口号。

ConnectAsync如果 和 SocketAsyncEventArgs.RemoteEndPoint 的Socket地址系列不在同一地址系列,则引发 NotSupportedException 方法。