TcpListener.BeginAcceptSocket(AsyncCallback, Object) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Rozpoczyna operację asynchroniczną, aby zaakceptować próbę połączenia przychodzącego.
public:
IAsyncResult ^ BeginAcceptSocket(AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginAcceptSocket (AsyncCallback? callback, object? state);
public IAsyncResult BeginAcceptSocket (AsyncCallback callback, object state);
member this.BeginAcceptSocket : AsyncCallback * obj -> IAsyncResult
Public Function BeginAcceptSocket (callback As AsyncCallback, state As Object) As IAsyncResult
Parametry
- callback
- AsyncCallback
Delegat AsyncCallback , który odwołuje się do metody wywoływania po zakończeniu operacji.
- state
- Object
Obiekt zdefiniowany przez użytkownika zawierający informacje o operacji akceptowania. Ten obiekt jest przekazywany do delegata po zakończeniu callback operacji.
Zwraca
Element IAsyncResult , który odwołuje się do asynchronicznego tworzenia obiektu Socket.
Wyjątki
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Została zamknięta Socket .
Przykłady
Poniższy przykład kodu przedstawia użycie BeginAcceptSocket metody do utworzenia i połączenia gniazda. Delegat wywołania zwrotnego wywołuje metodę EndAcceptSocket , aby zakończyć żądanie asynchroniczne.
// Thread signal.
public:
static ManualResetEvent^ ClientConnected;
// Accept one client connection asynchronously.
public:
static void DoBeginAcceptSocket(TcpListener^ listener)
{
// Set the event to nonsignaled state.
ClientConnected->Reset();
// Start to listen for connections from a client.
Console::WriteLine("Waiting for a connection...");
// Accept the connection.
// BeginAcceptSocket() creates the accepted socket.
listener->BeginAcceptSocket(
gcnew AsyncCallback(DoAcceptSocketCallback), listener);
// Wait until a connection is made and processed before
// continuing.
ClientConnected->WaitOne();
}
// Process the client connection.
public:
static void DoAcceptSocketCallback(IAsyncResult^ result)
{
// Get the listener that handles the client request.
TcpListener^ listener = (TcpListener^) result->AsyncState;
// End the operation and display the received data on the
//console.
Socket^ clientSocket = listener->EndAcceptSocket(result);
// Process the connection here. (Add the client to a
// server table, read data, etc.)
Console::WriteLine("Client connected completed");
// Signal the calling thread to continue.
ClientConnected->Set();
}
// Thread signal.
public static ManualResetEvent clientConnected =
new ManualResetEvent(false);
// Accept one client connection asynchronously.
public static void DoBeginAcceptSocket(TcpListener listener)
{
// Set the event to nonsignaled state.
clientConnected.Reset();
// Start to listen for connections from a client.
Console.WriteLine("Waiting for a connection...");
// Accept the connection.
// BeginAcceptSocket() creates the accepted socket.
listener.BeginAcceptSocket(
new AsyncCallback(DoAcceptSocketCallback), listener);
// Wait until a connection is made and processed before
// continuing.
clientConnected.WaitOne();
}
// Process the client connection.
public static void DoAcceptSocketCallback(IAsyncResult ar)
{
// Get the listener that handles the client request.
TcpListener listener = (TcpListener) ar.AsyncState;
// End the operation and display the received data on the
//console.
Socket clientSocket = listener.EndAcceptSocket(ar);
// Process the connection here. (Add the client to a
// server table, read data, etc.)
Console.WriteLine("Client connected completed");
// Signal the calling thread to continue.
clientConnected.Set();
}
' Thread signal.
Public Shared clientConnected As New ManualResetEvent(False)
' Accept one client connection asynchronously.
Public Shared Sub DoBeginAcceptSocket(listener As TcpListener)
' Set the event to nonsignaled state.
clientConnected.Reset()
' Start to listen for connections from a client.
Console.WriteLine("Waiting for a connection...")
' Accept the connection.
' BeginAcceptSocket() creates the accepted socket.
listener.BeginAcceptSocket(New AsyncCallback(AddressOf DoAcceptSocketCallback), listener)
' Wait until a connection is made and processed before
' continuing.
clientConnected.WaitOne()
End Sub
' Process the client connection.
Public Shared Sub DoAcceptSocketCallback(ar As IAsyncResult)
' Get the listener that handles the client request.
Dim listener As TcpListener = CType(ar.AsyncState, TcpListener)
' End the operation and display the received data on the
'console.
Dim clientSocket As Socket = listener.EndAcceptSocket(ar)
' Process the connection here. (Add the client to a
' server table, read data, etc.)
Console.WriteLine("Client connected completed")
' Signal the calling thread to continue.
clientConnected.Set()
End Sub
Uwagi
Operacja asynchroniczna BeginAcceptSocket musi zostać ukończona przez wywołanie EndAcceptSocket metody . Zazwyczaj metoda jest wywoływana przez delegata callback .
Ta metoda nie blokuje się, dopóki operacja nie zostanie zakończona. Aby zablokować działanie do momentu zakończenia operacji, użyj AcceptSocket metody .
Aby uzyskać szczegółowe informacje na temat używania asynchronicznego modelu programowania, zobacz Wywoływanie metod synchronicznych asynchronicznie.
Uwaga
Możesz wywołać RemoteEndPoint właściwość zwróconej Socket w celu zidentyfikowania adresu sieciowego i numeru portu hosta zdalnego.
Uwaga
Jeśli wystąpi błąd , użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu i zapoznaj się z dokumentacją kodu błędu interfejsu API w wersji 2 Windows Sockets w wersji 2, aby uzyskać szczegółowy opis błędu.SocketException
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.