Socket.ConnectAsync Metodo

Definizione

Avvia una richiesta asincrona per una connessione a un host remoto.

Overload

Nome Descrizione
ConnectAsync(SocketAsyncEventArgs)

Avvia una richiesta asincrona per una connessione a un host remoto.

ConnectAsync(SocketType, ProtocolType, SocketAsyncEventArgs)

Avvia una richiesta asincrona per una connessione a un host remoto.

ConnectAsync(SocketAsyncEventArgs)

Avvia una richiesta asincrona per una connessione a un host remoto.

public:
 bool ConnectAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool ConnectAsync(System.Net.Sockets.SocketAsyncEventArgs e);
member this.ConnectAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function ConnectAsync (e As SocketAsyncEventArgs) As Boolean

Parametri

e
SocketAsyncEventArgs

Oggetto SocketAsyncEventArgs da utilizzare per questa operazione socket asincrona.

Valori restituiti

true se l'operazione di I/O è in sospeso. L'evento Completed sul e parametro verrà generato al termine dell'operazione.

false se l'operazione di I/O è stata completata in modo sincrono. In questo caso, l'evento Completed sul e parametro non verrà generato e l'oggetto e passato come parametro può essere esaminato immediatamente dopo il ritorno della chiamata al metodo per recuperare il risultato dell'operazione.

Eccezioni

Un argomento non è valido. Questa eccezione si verifica se vengono specificati più buffer, la BufferList proprietà non è Null.

Il e parametro non può essere Null e non RemoteEndPoint può essere null.

è Socket in ascolto o un'operazione socket già in corso utilizzando l'oggetto SocketAsyncEventArgs specificato nel e parametro .

Si è verificato un errore durante il tentativo di accesso al socket.

L'endpoint locale e l'oggetto RemoteEndPoint non sono la stessa famiglia di indirizzi.

L'oggetto Socket è stato chiuso.

Un chiamante superiore nello stack di chiamate non dispone dell'autorizzazione per l'operazione richiesta.

Commenti

Se si usa un protocollo orientato alla connessione, il ConnectAsync metodo avvia una richiesta asincrona per una connessione all'host remoto. Se si usa un protocollo senza connessione, ConnectAsync stabilisce un host remoto predefinito.

Per ricevere una notifica di completamento, è necessario creare un metodo di callback che implementa il delegato SocketAsyncEventArgs EventHandler<e collegare il callback all'evento>.SocketAsyncEventArgs.Completed

Il chiamante deve impostare la SocketAsyncEventArgs.RemoteEndPoint proprietà sull'oggetto IPEndPoint dell'host remoto a cui connettersi.

Il chiamante può impostare la SocketAsyncEventArgs.UserToken proprietà su qualsiasi oggetto stato utente desiderato prima di chiamare il ConnectAsync metodo, in modo che le informazioni saranno recuperabili nel metodo di callback. Se il callback richiede più informazioni di un singolo oggetto, è possibile creare una classe di piccole dimensioni per contenere le altre informazioni sullo stato necessarie come membri.

Se si usa un protocollo senza connessione, ad esempio UDP, non è necessario chiamare ConnectAsync prima di inviare e ricevere dati. È possibile usare SendToAsync e ReceiveFromAsync per comunicare con un host remoto. Se si chiama ConnectAsync, tutti i datagrammi che arrivano da un indirizzo diverso dal valore predefinito specificato verranno eliminati. Se si vuole modificare l'host remoto predefinito, chiamare di nuovo il ConnectAsync metodo con l'endpoint desiderato.

Se si desidera impostare l'host remoto predefinito su un indirizzo di trasmissione, è prima necessario chiamare SetSocketOption e impostare Broadcast su true. Se questa operazione non viene eseguita, il ConnectAsync metodo genererà un'eccezione SocketException.

Sono necessarie le proprietà e gli eventi seguenti sull'oggetto System.Net.Sockets.SocketAsyncEventArgs :

Facoltativamente, è possibile specificare un buffer che verrà inviato in modo atomico sul socket dopo che il ConnectAsync metodo ha esito positivo. In questo caso, la SocketAsyncEventArgs.Buffer proprietà deve essere impostata sul buffer contenente i dati da inviare e la SocketAsyncEventArgs.Count proprietà deve essere impostata sul numero di byte di dati da inviare dal buffer. Una volta stabilita una connessione, questo buffer di dati viene inviato.

Se si usa un protocollo orientato alla connessione e non si chiama prima di chiamare BindConnectAsync, il provider di servizi sottostante assegnerà l'indirizzo di rete e il numero di porta più appropriati.

Se si usa un protocollo senza connessione, il provider di servizi non assegnerà un indirizzo IP di rete locale e un numero di porta finché non si chiamano i SendAsync metodi o ReceiveAsync .

Il ConnectAsync metodo genera un'eccezione NotSupportedException se la famiglia di indirizzi di Socket e SocketAsyncEventArgs.RemoteEndPoint non è la stessa famiglia di indirizzi.

Note

Se si riceve un oggetto SocketException quando si chiama questo metodo, utilizzare la SocketException.ErrorCode proprietà per ottenere il codice di errore specifico. Dopo aver ottenuto questo codice, fare riferimento alla documentazione relativa al codice di errore dell'API Windows Sockets versione 2 per una descrizione dettagliata dell'errore.

Vedi anche

Si applica a

ConnectAsync(SocketType, ProtocolType, SocketAsyncEventArgs)

Avvia una richiesta asincrona per una connessione a un host remoto.

public:
 static bool ConnectAsync(System::Net::Sockets::SocketType socketType, System::Net::Sockets::ProtocolType protocolType, System::Net::Sockets::SocketAsyncEventArgs ^ e);
public static bool ConnectAsync(System.Net.Sockets.SocketType socketType, System.Net.Sockets.ProtocolType protocolType, System.Net.Sockets.SocketAsyncEventArgs e);
static member ConnectAsync : System.Net.Sockets.SocketType * System.Net.Sockets.ProtocolType * System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Shared Function ConnectAsync (socketType As SocketType, protocolType As ProtocolType, e As SocketAsyncEventArgs) As Boolean

Parametri

socketType
SocketType

Uno dei SocketType valori.

protocolType
ProtocolType

Uno dei ProtocolType valori.

e
SocketAsyncEventArgs

Oggetto SocketAsyncEventArgs da utilizzare per questa operazione socket asincrona.

Valori restituiti

true se l'operazione di I/O è in sospeso. L'evento Completed sul e parametro verrà generato al termine dell'operazione.

false se l'operazione di I/O è stata completata in modo sincrono. In questo caso, l'evento Completed sul e parametro non verrà generato e l'oggetto e passato come parametro può essere esaminato immediatamente dopo il ritorno della chiamata al metodo per recuperare il risultato dell'operazione.

Eccezioni

Un argomento non è valido. Questa eccezione si verifica se vengono specificati più buffer, la BufferList proprietà non è Null.

Il e parametro non può essere Null e non RemoteEndPoint può essere null.

è Socket in ascolto o un'operazione socket già in corso utilizzando l'oggetto SocketAsyncEventArgs specificato nel e parametro .

Si è verificato un errore durante il tentativo di accesso al socket.

L'endpoint locale e l'oggetto RemoteEndPoint non sono la stessa famiglia di indirizzi.

L'oggetto Socket è stato chiuso.

Un chiamante superiore nello stack di chiamate non dispone dell'autorizzazione per l'operazione richiesta.

Commenti

Se si usa un protocollo orientato alla connessione, il metodo M:System.Net.Sockets.Socket.ConnectAsync(System.Net.Sockets.SocketType,System.Net.Sockets.ProtocolType,System.Net.Sockets.SocketAsyncEventArgs) avvia una richiesta asincrona per una connessione all'host remoto. Se si usa un protocollo senza connessione, ConnectAsync stabilisce un host remoto predefinito specificato dai socketType parametri e protocolType .

Per ricevere una notifica di completamento, è necessario creare un metodo di callback che implementa il delegato SocketAsyncEventArgs EventHandler<e collegare il callback all'evento>.SocketAsyncEventArgs.Completed

Il chiamante deve impostare la SocketAsyncEventArgs.RemoteEndPoint proprietà sull'oggetto IPEndPoint dell'host remoto a cui connettersi.

Il chiamante può impostare la SocketAsyncEventArgs.UserToken proprietà su qualsiasi oggetto stato utente desiderato prima di chiamare il ConnectAsync metodo, in modo che le informazioni saranno recuperabili nel metodo di callback. Se il callback richiede più informazioni di un singolo oggetto, è possibile creare una classe di piccole dimensioni per contenere le altre informazioni sullo stato necessarie come membri.

Se si usa un protocollo senza connessione, ad esempio UDP, non è necessario chiamare ConnectAsync prima di inviare e ricevere dati. È possibile usare SendToAsync e ReceiveFromAsync per comunicare con un host remoto. Se si chiama ConnectAsync, tutti i datagrammi che arrivano da un indirizzo diverso dal valore predefinito specificato verranno eliminati. Se si vuole modificare l'host remoto predefinito, chiamare di nuovo il ConnectAsync metodo con l'endpoint desiderato.

Se si desidera impostare l'host remoto predefinito su un indirizzo di trasmissione, è prima necessario chiamare SetSocketOption e impostare Broadcast su true. Se questa operazione non viene eseguita, il ConnectAsync metodo genererà un'eccezione SocketException.

Sono necessarie le proprietà e gli eventi seguenti sull'oggetto System.Net.Sockets.SocketAsyncEventArgs :

Facoltativamente, è possibile specificare un buffer che verrà inviato in modo atomico sul socket dopo che il ConnectAsync metodo ha esito positivo. In questo caso, la SocketAsyncEventArgs.Buffer proprietà deve essere impostata sul buffer contenente i dati da inviare e la SocketAsyncEventArgs.Count proprietà deve essere impostata sul numero di byte di dati da inviare dal buffer. Una volta stabilita una connessione, questo buffer di dati viene inviato.

Se si usa un protocollo orientato alla connessione e non si chiama prima di chiamare BindConnectAsync, il provider di servizi sottostante assegnerà l'indirizzo di rete e il numero di porta più appropriati.

Se si usa un protocollo senza connessione, il provider di servizi non assegnerà un indirizzo IP di rete locale e un numero di porta finché non si chiamano i SendAsync metodi o ReceiveAsync .

Il ConnectAsync metodo genera un'eccezione NotSupportedException se la famiglia di indirizzi di Socket e SocketAsyncEventArgs.RemoteEndPoint non è la stessa famiglia di indirizzi.

Note

Se si riceve un oggetto SocketException quando si chiama questo metodo, utilizzare la SocketException.ErrorCode proprietà per ottenere il codice di errore specifico. Dopo aver ottenuto questo codice, fare riferimento alla documentazione relativa al codice di errore dell'API Windows Sockets versione 2 per una descrizione dettagliata dell'errore.

Si applica a