Socket.Select Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Overload
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
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
- checkWrite
- IList
Oggetto IList delle istanze di Socket di cui verificare la possibilità di scrittura.
- timeout
- TimeSpan
Valore di timeout. Un valore uguale a -1 microsecondi indica un timeout infinito.
Eccezioni
Il checkRead
parametro , checkWrite
o checkError
è null
o vuoto.
Il checkRead
parametro , checkWrite
o checkError
contiene troppi socket.
L'oggetto timeout
era 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
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
- checkWrite
- IList
Oggetto IList delle istanze di Socket di cui verificare la possibilità di scrittura.
- microSeconds
- Int32
Valore di timeout in microsecondi. Il valore -1 indica un periodo di timeout infinito.
Eccezioni
Il parametro checkRead
è null
o vuoto.
-e-
Il parametro checkWrite
è null
o vuoto
-e-
Il parametro checkError
è null
o vuoto.
Si è verificato un errore durante il tentativo di accesso al socket.
.NET 5 e versioni successive: uno o più socket vengono eliminati.
Il checkRead
parametro , checkWrite
o checkError
contiene troppi socket.
Esempio
Nell'esempio di codice seguente viene Select usato per determinare quali socket di ascolto hanno una richiesta di connessione.
IPHostEntry^ lipa = Dns::Resolve( Dns::GetHostName() );
//Gets three separate local endpoints.
IPEndPoint^ lep1 = gcnew IPEndPoint( lipa->AddressList[ 0 ],11000 );
IPEndPoint^ lep2 = gcnew IPEndPoint( lipa->AddressList[ 0 ],11001 );
IPEndPoint^ lep3 = gcnew IPEndPoint( lipa->AddressList[ 0 ],11002 );
//creates an array of endpoints.
array<IPEndPoint^>^ipendpoints = gcnew array<IPEndPoint^>(3);
ipendpoints[ 0 ] = lep1;
ipendpoints[ 1 ] = lep2;
ipendpoints[ 2 ] = lep3;
//Creates three separate sockets.
Socket^ s1 = gcnew Socket( lep1->Address->AddressFamily,SocketType::Stream,ProtocolType::Tcp );
Socket^ s2 = gcnew Socket( lep2->Address->AddressFamily,SocketType::Stream,ProtocolType::Tcp );
Socket^ s3 = gcnew Socket( lep3->Address->AddressFamily,SocketType::Stream,ProtocolType::Tcp );
array<Socket^>^socketList = gcnew array<Socket^>(3);
socketList[ 0 ] = s1;
socketList[ 1 ] = s2;
socketList[ 2 ] = s3;
//Binds and Listens on all sockets in the array of sockets.
for ( int i = 0; i < 3; i++ )
{
socketList[ i ]->Bind( ipendpoints[ i ] );
socketList[ i ]->Listen( 1000 );
}
//Calls Select to determine which sockets are ready for reading.
Socket::Select( safe_cast<IList^>(socketList), nullptr, nullptr, 1000 );
//Reads on the sockets returned by Select.
array<Byte>^buffer = gcnew array<Byte>(1024);
String^ outString;
for ( Int32 j = 0; j < (socketList->Length - 1); j++ )
{
socketList[ j ]->Receive( buffer );
outString = "Socket ";
outString->Concat( j.ToString(), " has the message", Encoding::ASCII->GetString( buffer ) );
Console::WriteLine( outString );
}
}
};
int main()
{
return 0;
}
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 IList oggetto prima di poter usare il Select metodo . Verificare la leggibilità chiamando Select con come IListcheckRead
parametro . Per verificare la scrivibilità 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à significa 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 checkRead
elenchi , checkWrite
e checkError
) soddisfa i criteri specificati oppure il microSeconds
parametro viene superato, a qualsiasi condizione viene restituita per prima. L'impostazione su microSeconds
-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 scrivibilità 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
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 SocketExceptionoggetto , 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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per