Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Socket.BeginAccept (AsyncCallback, Object)

 

Data di pubblicazione: ottobre 2016

Avvia un'operazione asincrona per accettare un tentativo di connessione in ingresso.

Spazio dei nomi:   System.Net.Sockets
Assembly:  System (in System.dll)

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public IAsyncResult BeginAccept(
	AsyncCallback callback,
	object state
)

Parametri

callback
Type: System.AsyncCallback

Delegato AsyncCallback.

state
Type: System.Object

Oggetto che contiene informazioni sullo stato per questa richiesta.

Valore restituito

Type: System.IAsyncResult

Un IAsyncResult che fa riferimento asincrona Socket creazione.

Exception Condition
ObjectDisposedException

Il Socket oggetto è stato chiuso.

NotSupportedException

Windows NT è necessaria per questo metodo.

InvalidOperationException

Accettazione socket non è in ascolto per le connessioni. È necessario chiamare Bind e Listen prima di chiamare BeginAccept.

-oppure-

Il socket accettato è associato.

ArgumentOutOfRangeException

receiveSize è minore di 0.

SocketException

Si è verificato un errore durante il tentativo di accesso al socket. Per altre informazioni, vedere la sezione Osservazioni.

I protocolli orientati alla connessione possono utilizzare il BeginAccept tenta di metodo per elaborare in modo asincrono in ingresso. Accettare le connessioni in modo asincrono offre la possibilità di inviare e ricevere dati in un thread di esecuzione separato. Prima di chiamare il BeginAccept (metodo), è necessario chiamare il Listen metodo per attendere e accodare le richieste di connessione in ingresso.

È necessario creare un metodo di callback che implementa il AsyncCallback delegato e passare il relativo nome per il BeginAccept metodo. A tale scopo, nel caso minimo, è necessario passare l'ascolto Socket oggetto BeginAccept tramite il state parametro. Se il callback richiede ulteriori informazioni, è possibile creare una classe per contenere il Socket e le altre informazioni necessarie. Passare un'istanza di questa classe per il BeginAccept metodo attraverso il state parametro.

Il metodo di callback deve richiamare il EndAccept metodo. Quando l'applicazione chiama BeginAccept, il sistema in genere utilizza un thread separato per eseguire il metodo di callback specificato e blocca il EndAccept fino a quando non viene recuperata una connessione in sospeso. EndAccept Restituisce un nuovo Socket che è possibile utilizzare per inviare e ricevere dati con l'host remoto. Non è possibile utilizzare l'oggetto restituito Socket per accettare connessioni aggiuntive dalla coda di connessione. Se si desidera che il thread originale si blocchi dopo la chiamata di BeginAccept metodo, utilizzare WaitHandle.WaitOne. Chiamare il metodo Set in un ManualResetEvent nel metodo di callback quando si desidera che il thread originale per continuare l'esecuzione.

Il sistema può utilizzare anche il thread chiamante per richiamare il metodo di callback. In questo caso, il CompletedSynchronously proprietà sull'oggetto restituito IAsyncResult verrà impostata per indicare che il BeginAcceptmetodo completata in modo sincrono.

Per ulteriori informazioni sulla scrittura di metodi di callback vedere Marshaling a Delegate as a Callback Method.

Per annullare una chiamata in sospeso il BeginAccept (metodo), chiudere il Socket. Quando ilClosemetodo viene chiamato durante un'operazione asincrona è in corso, il callback fornito per il BeginAccept viene chiamato il metodo. Una chiamata successiva al EndAcceptmetodo genererà un ObjectDisposedException per indicare che l'operazione è stata annullata.

System_CAPS_noteNota

È possibile utilizzare il RemoteEndPoint proprietà dell'oggetto restituito Socket per identificare il numero porta e indirizzo di rete dell'host remoto.

System_CAPS_noteNota

Se si riceve un SocketException, utilizzare il SocketException.ErrorCode proprietà per ottenere il codice di errore specifico. Dopo aver ottenuto il codice, fare riferimento alla documentazione relativa ai codici di errore dell'API Windows Sockets versione 2 disponibile in MSDN per una descrizione dettagliata dell'errore.

System_CAPS_noteNota

Questo membro genera informazioni di traccia quando viene abilitata la funzionalità di traccia di rete nell'applicazione in uso. Per altre informazioni, vedere Tracciatura di rete in .NET Framework.

System_CAPS_noteNota

Il contesto di esecuzione (il contesto di sicurezza, l'utente rappresentato e il contesto di chiamata) viene memorizzato nella cache per asincrona Socket metodi. Dopo il primo utilizzo di un particolare contesto (un oggetto specifico asincrono Socket metodo, una specifica Socket istanza e un callback specifico), nei successivi utilizzi di tale contesto verranno visualizzato un miglioramento delle prestazioni.

Esempio di codice seguente tenta di ricevere una connessione in ingresso in modo asincrono.

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{
           s.Bind(lep);
           s.Listen(1000);

           while(true){
                allDone.Reset();

                Console.WriteLine("Waiting for a connection...");
                s.BeginAccept(new AsyncCallback(Async_Send_Receive.Listen_Callback), s);

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

.NET Framework
Disponibile da 1.1
Torna all'inizio
Mostra: