次の方法で共有


Socket.BeginConnect メソッド

リモート ホスト接続への非同期要求を開始します。

Public Function BeginConnect( _
   ByVal remoteEP As EndPoint, _   ByVal callback As AsyncCallback, _   ByVal state As Object _) As IAsyncResult
[C#]
public IAsyncResult BeginConnect(EndPointremoteEP,AsyncCallbackcallback,objectstate);
[C++]
public: IAsyncResult* BeginConnect(EndPoint* remoteEP,AsyncCallback* callback,Object* state);
[JScript]
public function BeginConnect(
   remoteEP : EndPoint,callback : AsyncCallback,state : Object) : IAsyncResult;

パラメータ

  • remoteEP
    リモート ホストを表す EndPoint
  • callback
    AsyncCallback デリゲート。
  • state
    この要求のステータス情報を格納するオブジェクト。

戻り値

非同期接続を参照する IAsyncResult

例外

例外の種類 条件
ArgumentNullException remoteEP が null 参照 (Visual Basic では Nothing) です。
SocketException ソケットへのアクセスを試みているときにエラーが発生しました。詳細については、「解説」を参照してください。
ObjectDisposedException Socket は閉じられています。
SecurityException コール スタックの上位にある呼び出し元が、要求された操作のアクセス許可を保持していません。

解説

コネクション指向のプロトコルを使用する場合、 BeginConnect メソッドは、 remoteEP パラメータへの接続に対する非同期要求を開始します。コネクションレスのプロトコルを使用している場合、 BeginConnect は既定のリモート ホストを確立します。既定のリモート ホストに非同期的に接続したりこのホストを非同期的に設定したりすると、個別の実行スレッド内でデータを送受信できます。

AsyncCallback デリゲートを実装するコールバック メソッドを作成し、その名前を BeginConnect メソッドに渡すことができます。少なくとも、 state パラメータを使用して、 SocketBeginConnect に渡さなければなりません。他の情報がコールバックに必要な場合は、小さなクラスを作成して Socket などの必要な情報を保持します。このクラスのインスタンスは、 state パラメータを使用して BeginConnect メソッドに渡します。

コールバック メソッドは EndConnect メソッドを実装する必要があります。アプリケーションが BeginConnect を呼び出すと、指定したコールバック メソッドが個別のスレッドを使用して実行され、 EndConnect は、 Socket が正常に接続するか例外をスローするまでブロックします。 BeginConnect メソッドを呼び出してから元のスレッドをブロックする場合は、 WaitOne を使用します。元のスレッドの実行を継続させるには、コールバック メソッドで Set を呼び出します。コールバック メソッドの記述に関する追加情報については、「 Callback のサンプル 」を参照してください。

UDP などのコネクションレスのプロトコルを使用している場合は、データを送受信する前に BeginConnect を呼び出す必要はありません。リモート ホストとの通信には、 BeginSendTo および BeginReceiveFrom を使用できます。 BeginConnect を呼び出した場合、指定した既定のアドレス以外から送信されたデータグラムはすべて破棄されます。既定のリモート ホストをブロード キャスト アドレスに設定するには、まず SetSocketOption を呼び出して Broadcast を true に設定する必要があります。 このように設定できない場合、 BeginConnectSocketException をスローします。

コネクション指向のプロトコルを使用しており、 BeginConnect の前に Bind を呼び出さない場合は、基になるサービス プロバイダが最も適切なローカル ネットワーク アドレスとポート番号を割り当てます。コネクションレスのプロトコルを使用している場合、 BeginSend メソッドまたは ReceiveFrom メソッドを呼び出すまで、サービス プロバイダはローカル ネットワーク アドレスとポート番号を割り当てません。既定のリモート ホストを変更する必要がある場合は、必要なエンドポイントで BeginConnect メソッドを再度呼び出します。

メモ    SocketException が発生した場合は、 SocketException.ErrorCode を使用して具体的なエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのマニュアルから、エラーの詳細情報を確認できます。これは MSDN から入手できます。

使用例

[Visual Basic, C#, C++] 非同期接続の試行を開始する例を次に示します。

 
Dim lipa As IPHostEntry = Dns.Resolve("host.contoso.com")
Dim lep As New IPEndPoint(lipa.AddressList(0), 11000)

Dim s As New Socket(lep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
Try
   
   While True
      allDone.Reset()
      
      Console.WriteLine("Establishing Connection")
  
      s.BeginConnect(lep, New AsyncCallback(AddressOf Async_Send_Receive.Connect_Callback), s)
      
      allDone.WaitOne()
   End While
Catch e As Exception
   Console.WriteLine(e.ToString())
End Try
   End Sub 'Connect

[C#] 
IPHostEntry lipa = Dns.Resolve("host.contoso.com");
IPEndPoint lep = new IPEndPoint(lipa.AddressList[0], 11000);

   Socket s = new Socket(lep.Address.AddressFamily,
                                  SocketType.Stream,
                                     ProtocolType.Tcp);
   try{
      
             while(true){
             allDone.Reset();

             Console.WriteLine("Establishing Connection");
             s.BeginConnect(lep, new AsyncCallback(Async_Send_Receive.Connect_Callback), s);

             allDone.WaitOne();
        }
   }
   catch (Exception e){
        Console.WriteLine(e.ToString());
   }

[C++] 
IPHostEntry* lipa = Dns::Resolve(S"host.contoso.com");
IPEndPoint* lep = new IPEndPoint(lipa->AddressList[0], 11000);

Socket* s = new Socket(lep->Address->AddressFamily,
    SocketType::Stream,
    ProtocolType::Tcp);

try {
    while (true) {
        allDone->Reset();

        Console::WriteLine(S"Establishing Connection");
        AsyncCallback* pasync = new AsyncCallback(0, &Async_Send_Receive::Connect_Callback);
        s->BeginConnect(lep, pasync, s);

        allDone->WaitOne();
    }
} catch (Exception* e) {
    Console::WriteLine(e);
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

Socket クラス | Socket メンバ | System.Net.Sockets 名前空間 | 非同期呼び出しの組み込み | Callback のサンプル | AsyncCallback | EndConnect | BeginSendTo | BeginReceiveFrom