語言

TcpListener.AcceptTcpClient 方法

定義

接受一個待處理的連線請求。

public:
 System::Net::Sockets::TcpClient ^ AcceptTcpClient();
public System.Net.Sockets.TcpClient AcceptTcpClient();
member this.AcceptTcpClient : unit -> System.Net.Sockets.TcpClient
Public Function AcceptTcpClient () As TcpClient

傳回

TcpClient A 用於傳送和接收資料。

例外狀況

聽者尚未被呼叫 Start()至 。

利用該 ErrorCode 屬性取得特定的錯誤代碼。 取得這些程式碼後,你可以參考 Windows Sockets 版本 2 的 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

範例

在以下程式碼範例中,該 AcceptTcpClient 方法用來回傳一個 TcpClient。 此裝置 TcpClient 用於與新連接的客戶端通訊。

/**
* The following sample is intended to demonstrate how to use a
* TcpListener for synchronous communcation with a TCP client
* It creates a TcpListener that listens on the specified port (13000).
* Any TCP client that wants to use this TcpListener has to explicitly connect
* to an address obtained by the combination of the server
* on which this TcpListener is running and the port 13000.
* This TcpListener simply echoes back the message sent by the client
* after translating it into uppercase.
* Refer to the related client in the TcpClient class.
*/
using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;

public class TcpListenerSample
{

    static void Main(string[] args)
    {
        try
        {
            // set the TcpListener on port 13000
            int port = 13000;
            TcpListener server = new TcpListener(IPAddress.Any, port);

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

            // Buffer for reading data
            byte[] bytes = new byte[1024];
            string data;

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

                // Perform a blocking call to accept requests.
                // You could also use server.AcceptSocket() here.
                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("Connected!");

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

                int i;

                // 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();

                    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));

                    i = stream.Read(bytes, 0, bytes.Length);
                }

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

        Console.WriteLine("Hit enter to continue...");
        Console.Read();
    }
}
' The following sample is intended to demonstrate how to use a
' TcpListener for synchronous communcation with a TCP client
' It creates a TcpListener that connects to the specified port (13000).
' Any TCP client that wants to use this TcpListener has to explicitly connect 
' to an address obtained by the combination of the server
' on which this TcpListener is running and the port 13000.
' This TcpListener simply echoes back the message sent by the client
' after translating it into uppercase. 
' Refer to the related client in the TcpClient class. 
'/


Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Text

 _

Class MyTcpListener
   
   Public Shared Sub Main()
      
      Try
         ' Set the TcpListener on port 13000.
         Dim port As Int32 = 13000
         Dim server As New TcpListener(IPAddress.Any, 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 use 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
End Class

備註

AcceptTcpClient 是一種阻擋方法,回傳 a TcpClient 可用來傳送和接收資料。 如果你想避免被阻塞,請使用此 Pending 方法判斷連線請求是否存在於輸入連線佇列中。

使用該TcpClient.GetStream方法取得返回NetworkStream的標的。TcpClient 他們 NetworkStream 會提供與遠端主機發送與接收的方法。 完成後 TcpClient,務必打電話給它 Close 。 如果你想要比 offer TcpClient 更大的彈性,可以考慮使用 AcceptSocket。

Note

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱.NET框架中的網絡追蹤。

適用於

另請參閱