Condividi tramite


Socket.Select Metodo

Definizione

Overload

Nome Descrizione
Select(IList, IList, IList, TimeSpan)

Determina lo stato di uno o più socket.

Select(IList, IList, IList, Int32)

Determina lo stato di uno o più socket.

Select(IList, IList, IList, TimeSpan)

Origine:
Socket.cs
Origine:
Socket.cs
Origine:
Socket.cs
Origine:
Socket.cs
Origine:
Socket.cs

Determina lo stato di uno o più socket.

public:
 static void Select(System::Collections::IList ^ checkRead, System::Collections::IList ^ checkWrite, System::Collections::IList ^ checkError, TimeSpan timeout);
public static void Select(System.Collections.IList? checkRead, System.Collections.IList? checkWrite, System.Collections.IList? checkError, TimeSpan timeout);
static member Select : System.Collections.IList * System.Collections.IList * System.Collections.IList * TimeSpan -> unit
Public Shared Sub Select (checkRead As IList, checkWrite As IList, checkError As IList, timeout As TimeSpan)

Parametri

checkRead
IList

Oggetto IList di Socket istanze di cui verificare la leggibilità.

checkWrite
IList

Oggetto IList di Socket istanze di cui verificare la scrivibilità.

checkError
IList

Oggetto IList di Socket istanze di cui verificare la presenza di errori.

timeout
TimeSpan

Valore di timeout. Un valore uguale a -1 microsecondi indica un timeout infinito.

Eccezioni

I checkReadparametri , checkWritee checkError sono tutti null o vuoti. Almeno uno di checkRead, checkWriteo checkError deve contenere almeno un Socketoggetto .

Il checkReadparametro , checkWriteo checkError contiene troppi socket.

l'oggetto timeout è minore di -1 microsecondi o maggiore di MaxValue microsecondi

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

Uno o più socket sono stati eliminati.

Si applica a

Select(IList, IList, IList, Int32)

Origine:
Socket.cs
Origine:
Socket.cs
Origine:
Socket.cs
Origine:
Socket.cs
Origine:
Socket.cs

Determina lo stato di uno o più socket.

public:
 static void Select(System::Collections::IList ^ checkRead, System::Collections::IList ^ checkWrite, System::Collections::IList ^ checkError, int microSeconds);
public static void Select(System.Collections.IList? checkRead, System.Collections.IList? checkWrite, System.Collections.IList? checkError, int microSeconds);
public static void Select(System.Collections.IList checkRead, System.Collections.IList checkWrite, System.Collections.IList checkError, int microSeconds);
static member Select : System.Collections.IList * System.Collections.IList * System.Collections.IList * int -> unit
Public Shared Sub Select (checkRead As IList, checkWrite As IList, checkError As IList, microSeconds As Integer)

Parametri

checkRead
IList

Oggetto IList di Socket istanze di cui verificare la leggibilità.

checkWrite
IList

Oggetto IList di Socket istanze di cui verificare la scrivibilità.

checkError
IList

Oggetto IList di Socket istanze di cui verificare la presenza di errori.

microSeconds
Int32

Valore di timeout, espresso in microsecondi. Un valore -1 indica un timeout infinito.

Eccezioni

I checkReadparametri , checkWritee checkError sono tutti null o vuoti. Almeno uno di checkRead, checkWriteo checkError deve contenere almeno un Socketoggetto .

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

.NET 5 e versioni successive: uno o più socket vengono eliminati.

Il checkReadparametro , checkWriteo checkError contiene troppi socket.

Esempio

Nell'esempio di codice seguente viene Select usato per determinare quali socket in ascolto hanno una richiesta di connessione.

IPHostEntry ipHostEntry = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostEntry.AddressList[0];

Socket socket0 = null;
Socket socket1 = null;
Socket socket2 = null;
Socket socket3 = null;
Socket socket4 = null;
Socket socket5 = null;

ArrayList listenList = new ArrayList();
listenList.Add(socket0);
listenList.Add(socket1);
listenList.Add(socket2);

ArrayList acceptList = new ArrayList();
acceptList.Add(socket3);
acceptList.Add(socket4);
acceptList.Add(socket5);

for( int i = 0; i < 3; i++ )
{
  listenList[i] = new Socket(AddressFamily.InterNetwork,
                             SocketType.Stream,
                             ProtocolType.Tcp);
  ((Socket)listenList[i]).Bind(new IPEndPoint(ipAddress, 11000 + i));
  ((Socket)listenList[i]).Listen(10);
}

// Only the sockets that contain a connection request
// will remain in listenList after Select returns.

Socket.Select(listenList, null, null, 1000);

for( int i = 0; i < listenList.Count; i++ )
{
  acceptList[i] = ((Socket)listenList[i]).Accept();
}
Dim ipHostEntry As IPHostEntry = Dns.Resolve(Dns.GetHostName())
Dim ipAddress As IPAddress = ipHostEntry.AddressList(0)

Dim socket0 As Socket = Nothing
Dim socket1 As Socket = Nothing
Dim socket2 As Socket = Nothing
Dim socket3 As Socket = Nothing
Dim socket4 As Socket = Nothing
Dim socket5 As Socket = Nothing

Dim listenList As New ArrayList()
listenList.Add(socket0)
listenList.Add(socket1)
listenList.Add(socket2)

Dim acceptList As New ArrayList()
acceptList.Add(socket3)
acceptList.Add(socket4)
acceptList.Add(socket5)

Dim i As Integer
For i = 0 To 2
   listenList(i) = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
   CType(listenList(i), Socket).Bind(New IPEndPoint(ipAddress, 11000 + i))
   CType(listenList(i), Socket).Listen(10)
Next i

'Only the sockets that contain a connection request
'will remain in listenList after Select returns.
Socket.Select(listenList, Nothing, Nothing, 1000)

For i = 0 To listenList.Count - 1
   acceptList(i) = CType(listenList(i), Socket).Accept()
Next i

Commenti

Select è un metodo statico che determina lo stato di una o più Socket istanze. È necessario inserire uno o più socket in un oggetto IList prima di poter usare il Select metodo . Verificare la leggibilità chiamando Select con come IListcheckRead parametro . Per verificare la scrittura dei socket, usare il checkWrite parametro . Per rilevare le condizioni di errore, usare checkError. Dopo aver chiamato Select, l'oggetto IList verrà riempito solo con i socket che soddisfano le condizioni.

Se si è in uno stato di ascolto, la leggibilità significa che una chiamata a Accept avrà esito positivo senza bloccare. Se la connessione è già stata accettata, la leggibilità indica che i dati sono disponibili per la lettura. In questi casi, tutte le operazioni di ricezione avranno esito positivo senza bloccare. La leggibilità può anche indicare se il telecomando Socket ha arrestato la connessione. In tal caso, una chiamata a Receive restituirà immediatamente, con zero byte restituiti.

Select restituisce quando almeno uno dei socket di interesse (i socket negli checkReadelenchi , checkWritee checkError ) soddisfa i criteri specificati oppure il microSeconds parametro viene superato, a condizione che venga raggiunto per primo. L'impostazione microSeconds di su -1 specifica un timeout infinito.

Se si effettua una chiamata non bloccante a Connect, la scrittura significa che la connessione è stata eseguita correttamente. Se è già stata stabilita una connessione, la scrittura significa che tutte le operazioni di invio avranno esito positivo senza bloccare.

Se è stata effettuata una chiamata non bloccante a Connect, il checkerror parametro identifica i socket che non sono connessi correttamente.

Nota

Usare il Poll metodo se si vuole determinare solo lo stato di un singolo Socketoggetto .

Nota

Questo metodo non è in grado di rilevare determinati tipi di problemi di connessione, ad esempio un cavo di rete interrotto o che l'host remoto è stato arrestato in modo anomalo. È necessario tentare di inviare o ricevere dati per rilevare questi tipi di errori.

Nota

Se si riceve un oggetto SocketException, 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