次の方法で共有


TcpListener.Start メソッド

受信接続要求の待機を開始します。

Public Sub Start()
[C#]
public void Start();
[C++]
public: void Start();
[JScript]
public function Start();

例外

例外の種類 条件
SocketException SocketException.ErrorCode を使用して特定のエラー コードを取得します。このコードを取得したら、Windows Socket Version 2 API エラー コードのマニュアルから、エラーの詳細情報を確認できます。これは MSDN から入手できます。

解説

Start メソッドは、基になる Socket を初期化し、これをローカル エンドポイントにバインドして、受信接続の試行を待機します。接続要求を受信すると、 Start は要求をキューに置き、 Stop メソッドが呼び出されるまで追加の要求を待機し続けます。 TcpListener は、キューに最大数の接続が置かれている状態で接続要求を受信すると、 SocketException をスローします。

受信接続のキューから接続を削除するには、 AcceptTcpClient メソッドまたは AcceptSocket メソッドのいずれかを使用します。 AcceptTcpClient メソッドは、キューから接続を削除し、データの送受信に使用できる TcpClient を返します。また、 AcceptSocket メソッドは、 Socket を返します。これもデータの送受信に使用できます。アプリケーションが基本ブロッキング同期 I/O だけを要求する場合は、 AcceptTcpClient を使用します。より詳細に動作を制御するには、 AcceptSocket を使用します。これらのメソッドは両方とも、接続要求がキュー内で使用可能になるまで実行をブロックします。接続要求を受け取る前に接続が使用可能かどうかを確認する場合は、 Pending メソッドを使用します。

TcpListener を終了し、待機を停止するには、 Stop メソッドを使用します。受け取った接続は、1 つずつ終了させる必要があります。

使用例

[Visual Basic, C#, C++] Start を使用して、クライアントからの接続試行を待機する例を次に示します。

 
' The following function creates a TcpServer that connects to  
' the specified port (13000).
' Refer to the related client in the TcpClient class. 

Public Shared Sub Main()
   
   Try
      ' Set the TcpListener on port 13000.
      Dim port As Int32 = 13000
      Dim server As New TcpListener(port)
      
      ' Start listening for client requests.
      server.Start()
      
      ' Buffer for reading data
      Dim bytes(1024) As [Byte]
      Dim data As [String] = Nothing
      
      ' Enter the listening loop.
      While True
         Console.Write("Waiting for a connection... ")
         
         ' Perform a blocking call to accept requests.
         ' You could also user server.AcceptSocket() here.
         Dim client As TcpClient = server.AcceptTcpClient()
         Console.WriteLine("Connected!")
         
         data = Nothing
         
         ' Get a stream object for reading and writing
         Dim stream As NetworkStream = client.GetStream()
         
         Dim i As Int32
         
         ' Loop to receive all the data sent by the client.
         i = stream.Read(bytes, 0, bytes.Length)
         While (i <> 0) 
            ' Translate data bytes to a ASCII string.
            data = System.Text.Encoding.ASCII.GetString(bytes, 0, i)
            Console.WriteLine([String].Format("Received: {0}", data))
            
            ' Process the data sent by the client.
            data = data.ToUpper()
            
            Dim msg As [Byte]() = System.Text.Encoding.ASCII.GetBytes(data)
            
            ' Send back a response.
            stream.Write(msg, 0, msg.Length)
            Console.WriteLine([String].Format("Sent: {0}", data))
           
            i = stream.Read(bytes, 0, bytes.Length)

         End While
         
         ' Shutdown and end connection
         client.Close()
      End While
   Catch e As SocketException
      Console.WriteLine("SocketException: {0}", e)
   End Try
   
   Console.WriteLine(ControlChars.Cr + "Hit enter to continue...")
   Console.Read()
End Sub 'Main

[C#] 
/**
 * The following function creates a TcpServer that connects to  
 * the specified port (13000).Any TcpClient that wants to use this server
 * has to explicitly connect to an address obtained by the combination of
 * the sever on which this TCpServer is runnig and the port 13000. 
 * This TcpServer simply echoes back the message sent by the TcpClient, after
 * translating it into uppercase. 
 * Refer to the related client in the TcpClient class. 
 **/ 
public static void Main()
{    
 
  try
  {
    // Set the TcpListener on port 13000.
    Int32 port = 13000;
    TcpListener server = new TcpListener(port);

    // Start listening for client requests.
    server.Start();
       
    // Buffer for reading data
    Byte[] bytes = new Byte[256];
    String data = null;

    // Enter the listening loop.
    while(true) 
    {
      Console.Write("Waiting for a connection... ");
      
      // Perform a blocking call to accept requests.
      // You could also user server.AcceptSocket() here.
      TcpClient client = server.AcceptTcpClient();            
      Console.WriteLine("Connected!");

      data = null;

      // Get a stream object for reading and writing
      NetworkStream stream = client.GetStream();

      Int32 i;

      // Loop to receive all the data sent by the client.
      while((i = stream.Read(bytes, 0, bytes.Length))!=0) 
      {   
        // Translate data bytes to a ASCII string.
        data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
        Console.WriteLine(String.Format("Received: {0}", data));
     
        // Process the data sent by the client.
        data = data.ToUpper();

        Byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

        // Send back a response.
        stream.Write(msg, 0, msg.Length);
        Console.WriteLine(String.Format("Sent: {0}", data));            
      }
       
      // Shutdown and end connection
      client.Close();
    }
  }
  catch(SocketException e)
  {
    Console.WriteLine("SocketException: {0}", e);
  }
    
  Console.WriteLine("\nHit enter to continue...");
  Console.Read();
}   

[C++] 
/**
 * The following function creates a TcpServer that connects to  
 * the specified port (13000).Any TcpClient that wants to use this server
 * has to explicitly connect to an address obtained by the combination of
 * the sever on which this TCpServer is runnig and the port 13000. 
 * This TcpServer simply echoes back the message sent by the TcpClient, after
 * translating it into uppercase. 
 * Refer to the related client in the TcpClient class. 
 **/ 
int main()
{    

   try
   {
      // Set the TcpListener on port 13000.
      Int32 port = 13000;
      TcpListener* server = new TcpListener(port);

      // Start listening for client requests.
      server->Start();

      // Buffer for reading data
      Byte bytes[] = new Byte[256];
      String* data = 0;

      // Enter the listening loop.
      while(true) 
      {
         Console::Write(S"Waiting for a connection... ");

         // Perform a blocking call to accept requests.
         // You could also user server.AcceptSocket() here.
         TcpClient* client = server->AcceptTcpClient();            
         Console::WriteLine(S"Connected!");

         data = 0;

         // Get a stream object for reading and writing
         NetworkStream* stream = client->GetStream();

         Int32 i;

         // Loop to receive all the data sent by the client.
         while((i = stream->Read(bytes, 0, bytes->Length))!=0) 
         {   
            // Translate data bytes to a ASCII string.
            data = System::Text::Encoding::ASCII->GetString(bytes, 0, i);
            Console::WriteLine(String::Format(S"Received: {0}", data));

            // Process the data sent by the client.
            data = data->ToUpper();

            Byte msg[] = System::Text::Encoding::ASCII->GetBytes(data);

            // Send back a response.
            stream->Write(msg, 0, msg->Length);
            Console::WriteLine(String::Format(S"Sent: {0}", data));            
         }

         // Shutdown and end connection
         client->Close();
      }
   }
   catch(SocketException* e)
   {
      Console::WriteLine(S"SocketException: {0}", e);
   }

   Console::WriteLine(S"\nHit enter to continue...");
   Console::Read();
}   

[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

参照

TcpListener クラス | TcpListener メンバ | System.Net.Sockets 名前空間 | Listen | Bind | AcceptTcpClient | AcceptSocket | Pending | Stop