信息
您所需的主题如下所示。但此主题未包含在此库中。

Socket 类

2013/12/13

实现 Berkeley 套接字接口。

System.Object
  System.Net.Sockets.Socket

Namespace:  System.Net.Sockets
程序集:  System.Net(位于 System.Net.dll 中)

public class Socket : IDisposable

Socket 类型公开以下成员。

  名称说明
公共方法Socket使用指定的地址族、套接字类型和协议初始化 Socket 类的新实例。
返回顶部

  名称说明
公共属性AddressFamily获取 Socket 的地址族。
公共属性Connected获取一个值,该值指示 Socket 是否在上次操作后连接到了远程主机。
公共属性LocalEndPoint获取包含套接字绑定到的本地 IP 地址和端口号的本地终结点。这是当前用以进行通信的套接字的终结点。
公共属性NoDelay获取或设置 Boolean 值,该值指定 Socket 是否正在使用 Nagle 算法。
公共属性静态成员OSSupportsIPv4获取一个值,该值指示在当前主机上 IPv4 支持是否可用并且已启用。
公共属性静态成员OSSupportsIPv6获取一个值,该值指示在当前主机上 IPv6 支持是否可用并且已启用。
公共属性ProtocolType获取 Socket 的协议类型。
公共属性ReceiveBufferSize获取或设置一个值,它指定 Socket 接收缓冲区的大小。
公共属性RemoteEndPoint获取远程终结点。
公共属性SendBufferSize获取或设置一个值,该值指定 Socket 发送缓冲区的大小。
公共属性Ttl获取或设置一个值,指定 Socket 发送的 Internet 协议 (IP) 数据包的生存时间 (TTL) 值。
返回顶部

  名称说明
公共方法AcceptAsync开始一个异步操作来接受一个传入的连接尝试。
公共方法Bind使套接字与一个特定本地终结点相关联。除非需要使用特定的本地终结点,否则不必在使用 ConnectAsync 方法之前调用“绑定”。
公共方法静态成员CancelConnectAsync取消远程主机连接的未完成的异步套接字操作。
公共方法Close()关闭 Socket 连接并释放所有关联的资源。
公共方法Close(Int32)关闭 Socket 连接并释放与指定超时关联的所有资源以允许发送排队数据。
公共方法ConnectAsync(SocketAsyncEventArgs)开始一个对远程主机连接的异步请求。
公共方法静态成员ConnectAsync(SocketType, ProtocolType, SocketAsyncEventArgs)开始一个对远程主机连接的异步请求。
公共方法Dispose()释放由 Socket 使用的非托管资源,并可根据需要释放托管资源。
受保护的方法Dispose(Boolean)释放由 Socket 使用的非托管资源,并可根据需要释放托管资源。
公共方法Equals(Object)确定指定的 Object 是否等于当前的 Object (从 Object 继承。)
受保护的方法Finalize释放 Socket 类使用的资源。 (重写 Object.Finalize()。)
公共方法GetHashCode用作特定类型的哈希函数。 (从 Object 继承。)
公共方法GetType获取当前实例的 Type (从 Object 继承。)
公共方法Listen侦听传入的连接尝试。
受保护的方法MemberwiseClone创建当前 Object 的浅表副本。 (从 Object 继承。)
公共方法ReceiveAsync开始一个异步请求以便从连接的 Socket 对象中接收数据。
公共方法ReceiveFromAsync开始一个异步请求以便从特定的远程主机中接收数据。
公共方法SendAsync将数据异步发送到连接的 Socket 对象。
公共方法SendToAsync向特定远程主机异步发送数据。
公共方法Shutdown禁用某 Socket 上的发送和接收。
公共方法ToString返回一个字符串,它表示当前的对象。 (从 Object 继承。)
返回顶部

  名称说明
公共扩展方法AssociateToNetworkInterface通过将网络接口与一组新的网络接口信息相关联,设置有关该网络接口的信息。 (由 SocketExtensions 定义。)
公共扩展方法GetCurrentNetworkInterface获取有关网络接口的所有可用信息。 (由 SocketExtensions 定义。)
公共扩展方法SetNetworkPreference设置网络接口的首选项,以使用蜂窝或非蜂窝技术。 (由 SocketExtensions 定义。)
公共扩展方法SetNetworkRequirement设置网络接口的要求,以使用蜂窝或非蜂窝技术。 (由 SocketExtensions 定义。)
返回顶部

Socket 类为网络通信提供了一组方法和属性。Socket 类允许您使用 ProtocolType 枚举中所列出的任何一种通信协议执行异步数据传输。

 对于 Windows Phone OS 7.1,支持的 ProtocolType 值为 TCP 和 UDP 协议。对于 Windows Phone OS 7.1,支持 TCP 单播、UDP 单播 和 UDP 多播客户端。

当数据发送和数据接收完成之后,可使用 Shutdown 方法来禁用 Socket。在调用 Shutdown 之后,可调用 Close 方法来释放与 Socket 关联的所有资源。

对于套接字,安全策略系统影响跨域网络访问。对于来自套接字的任何连接,都需要安全策略。


public class Example
{
  static ManualResetEvent clientDone = new ManualResetEvent(false);

  public static void Demo(System.Windows.Controls.TextBlock outputBlock)
  {

      SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();

      // NOTE: This is a fake end point. 
      // You must change this to a valid URL or you will get an exception below.
      DnsEndPoint hostEntry = new DnsEndPoint("http://www.contoso.com", 80);

      // Create a socket and connect to the server
      Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

      socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(SocketEventArg_Completed);

      socketEventArg.RemoteEndPoint = hostEntry;
      socketEventArg.UserToken = sock;
      sock.ConnectAsync(socketEventArg);
      clientDone.WaitOne();
  }

  // A single callback is used for all socket operations. 
  // This method forwards execution on to the correct handler 
  // based on the type of completed operation
  static void SocketEventArg_Completed(object sender, SocketAsyncEventArgs e)
  {
      switch (e.LastOperation)
      {
          case SocketAsyncOperation.Connect:
              ProcessConnect(e);
              break;

          case SocketAsyncOperation.Receive:
              ProcessReceive(e);
              break;

          case SocketAsyncOperation.Send:
              ProcessSend(e);
              break;

          default:
              throw new Exception("Invalid operation completed");
      }
  }

  // Called when a ConnectAsync operation completes
  private static void ProcessConnect(SocketAsyncEventArgs e)
  {
      if (e.SocketError == SocketError.Success)
      {
          // Successfully connected to the server

          // Send 'Hello World' to the server
          byte[] buffer = Encoding.UTF8.GetBytes("Hello World");
          e.SetBuffer(buffer, 0, buffer.Length);
          Socket sock = e.UserToken as Socket;
          bool willRaiseEvent = sock.SendAsync(e);

          if (!willRaiseEvent)
          {
              ProcessSend(e);
          }
      }
      else
      {
          throw new SocketException((int)e.SocketError);
      }
  }

      // Called when a ReceiveAsync operation completes
      // </summary>
  private static void ProcessReceive(SocketAsyncEventArgs e)
  {
      if (e.SocketError == SocketError.Success)
      {
          // Received data from server

          // Data has now been sent and received from the server. 
          // Disconnect from the server
          Socket sock = e.UserToken as Socket;
          sock.Shutdown(SocketShutdown.Send);
          sock.Close();
          clientDone.Set();
      }
      else
      {
          throw new SocketException((int)e.SocketError);
      }
  }


  // Called when a SendAsync operation completes
  private static void ProcessSend(SocketAsyncEventArgs e)
  {
      if (e.SocketError == SocketError.Success)
      {
          // Sent "Hello World" to the server successfully

          //Read data sent from the server
          Socket sock = e.UserToken as Socket;
          bool willRaiseEvent = sock.ReceiveAsync(e);

          if (!willRaiseEvent)
          {
              ProcessReceive(e);
          }
      }
      else
      {
          throw new SocketException((int)e.SocketError);
      }
  }
}


Windows Phone OS

受以下版本支持: 8.0, 7.1

Windows Phone

此类型的所有公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

显示: