情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Socket クラス

2013/12/12

Berkeley ソケット インターフェイスを実装します。

System.Object
  System.Net.Sockets.Socket

Namespace:  System.Net.Sockets
アセンブリ:  System.Net (System.Net.dll 内)

public class Socket : IDisposable

Socket 型で公開されるメンバーは以下のとおりです。

  名前説明
パブリック メソッドSocket指定したアドレス ファミリ、ソケットの種類、およびプロトコルを使用して、Socket クラスの新しいインスタンスを初期化します。
このページのトップへ

  名前説明
パブリック プロパティAddressFamilySocket のアドレス ファミリを取得します。
パブリック プロパティConnected最後に実行された操作の時点で、Socket がリモート ホストに接続されていたかどうかを示す値を取得します。
パブリック プロパティLocalEndPointソケットがバインドされているローカル IP アドレスとポート番号を格納するローカル エンドポイントを取得します。これはソケットが通信に使用しているエンドポイントです。
パブリック プロパティNoDelaySocket が Nagle アルゴリズムを使用するかどうかを指定する Boolean 値を取得または設定します。
パブリック プロパティ静的メンバーOSSupportsIPv4現在のホストで IPv4 サポートが使用可能で有効になっているかどうかを示す値を取得します。
パブリック プロパティ静的メンバーOSSupportsIPv6現在のホストで IPv6 サポートが使用可能で有効になっているかどうかを示す値を取得します。
パブリック プロパティProtocolTypeSocket のプロトコルの種類を取得します。
パブリック プロパティReceiveBufferSizeSocket の受信バッファーのサイズを指定する値を取得または設定します。
パブリック プロパティRemoteEndPointリモート エンドポイントを取得します。
パブリック プロパティSendBufferSizeSocket の送信バッファーのサイズを指定する値を取得または設定します。
パブリック プロパティTtlSocket によって送信されたインターネット プロトコル (IP) パケットの Time To Live (TTL) の値を指定する値を取得または設定します。
このページのトップへ

  名前説明
パブリック メソッドAcceptAsync受信接続の試行を受け入れる非同期操作を開始します。
パブリック メソッドBindソケットを特定のローカル エンドポイントに関連付けます。特定のローカル エンドポイントを使用する必要がない場合は、ConnectAsync メソッドを使用する前に、Bind を呼び出す必要はありません。
パブリック メソッド静的メンバーCancelConnectAsyncリモート ホスト接続の未処理の非同期ソケット操作を取り消します。
パブリック メソッドClose()Socket 接続を閉じ、関連付けられたすべてのリソースを解放します。
パブリック メソッドClose(Int32)Socket 接続を閉じ、指定のタイムアウトに関連付けられたすべてのリソースを解放して、キューに置かれたデータを送信できるようにします。
パブリック メソッドConnectAsync(SocketAsyncEventArgs)リモート ホスト接続の非同期要求を開始します。
パブリック メソッド静的メンバーConnectAsync(SocketType, ProtocolType, SocketAsyncEventArgs)リモート ホスト接続の非同期要求を開始します。
パブリック メソッドDispose()Socket が使用しているアンマネージ リソースを解放します。オプションでマネージ リソースも破棄します。
プロテクト メソッドDispose(Boolean)Socket が使用しているアンマネージ リソースを解放します。オプションでマネージ リソースも破棄します。
パブリック メソッドEquals(Object)指定した Object が、現在の Object と等しいかどうかを判断します。 (Object から継承されます。)
プロテクト メソッドFinalizeSocket クラスによって使用されていたリソースを解放します。 (Object.Finalize() をオーバーライドします。)
パブリック メソッドGetHashCode特定の型のハッシュ関数として機能します。 (Object から継承されます。)
パブリック メソッドGetType現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッドListen受信接続の試行を待機します。
プロテクト メソッドMemberwiseClone現在の Object の簡易コピーを作成します。 (Object から継承されます。)
パブリック メソッドReceiveAsync接続されている Socket オブジェクトからデータを受信する非同期要求を開始します。
パブリック メソッドReceiveFromAsync特定のリモート ホストからデータを受信する非同期要求を開始します。
パブリック メソッドSendAsync接続されている Socket オブジェクトに、データを非同期に送信します。
パブリック メソッドSendToAsync特定のリモート ホストにデータを非同期的に送信します。
パブリック メソッドShutdownSocket での送受信を無効にします。
パブリック メソッド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

この型のすべてのパブリック static (Visual Basic では Shared) メンバーは、スレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

表示: