Socket.Select Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Überlädt
Select(IList, IList, IList, TimeSpan) |
Bestimmt den Status von einem oder mehreren Sockets. |
Select(IList, IList, IList, Int32) |
Bestimmt den Status von einem oder mehreren Sockets. |
Select(IList, IList, IList, TimeSpan)
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
Bestimmt den Status von einem oder mehreren Sockets.
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)
Parameter
- checkRead
- IList
Eine IList von Socket-Instanzen, bei denen geprüft werden soll, ob sie gelesen werden können.
- checkWrite
- IList
Eine IList von Socket-Instanzen, bei denen geprüft werden soll, ob in sie geschrieben werden kann.
- timeout
- TimeSpan
Der Timeoutwert. Ein Wert von -1 Mikrosekunden gibt ein unendliches Timeout an.
Ausnahmen
Der checkRead
Parameter , checkWrite
oder checkError
ist null
oder leer.
Der checkRead
Parameter , checkWrite
oder checkError
enthält zu viele Sockets.
Der timeout
war kleiner als -1 Mikrosekunden oder größer als MaxValue Mikrosekunden
Fehler beim Versuch, auf den Socket zuzugreifen.
Mindestens ein Socket wurde verworfen.
Gilt für:
Select(IList, IList, IList, Int32)
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
Bestimmt den Status von einem oder mehreren Sockets.
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)
Parameter
- checkRead
- IList
Eine IList von Socket-Instanzen, bei denen geprüft werden soll, ob sie gelesen werden können.
- checkWrite
- IList
Eine IList von Socket-Instanzen, bei denen geprüft werden soll, ob in sie geschrieben werden kann.
- microSeconds
- Int32
Der Timeoutwert in Mikrosekunden. Ein Wert von -1 gibt ein unendliches Timeout an.
Ausnahmen
Der checkRead
-Parameter ist null
oder leer.
- und -
Der checkWrite
-Parameter ist null
oder leer.
- und -
Der checkError
-Parameter ist null
oder leer.
Fehler beim Versuch, auf den Socket zuzugreifen.
.NET 5 und höher: Mindestens ein Socket wird verworfen.
Der checkRead
Parameter , checkWrite
oder checkError
enthält zu viele Sockets.
Beispiele
Im folgenden Codebeispiel wird verwendet Select , um zu bestimmen, welche Lauschockets eine Verbindungsanforderung aufweisen.
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
Hinweise
Selectist eine statische Methode, die die status einer oder Socket mehrerer Instanzen bestimmt. Sie müssen mindestens einen Socket in einem platzieren, IList bevor Sie die Select -Methode verwenden können. Überprüfen Sie die Lesbarkeit, indem Sie mit dem IList als checkRead
Parameter aufrufenSelect. Verwenden Sie den checkWrite
Parameter, um Ihre Sockets auf Beschreibbarkeit zu überprüfen. Verwenden Sie checkError
zum Erkennen von Fehlerbedingungen . Nach dem Aufruf Selectwird der IList nur mit den Sockets gefüllt, die die Bedingungen erfüllen.
Wenn Sie sich in einem Lauschzustand befinden, bedeutet die Lesbarkeit, dass ein Aufruf von erfolgreich ist, ohne zu Accept blockieren. Wenn Sie die Verbindung bereits akzeptiert haben, bedeutet Lesbarkeit, dass Daten zum Lesen verfügbar sind. In diesen Fällen sind alle Empfangsvorgänge ohne Blockierung erfolgreich. Die Lesbarkeit kann auch angeben, ob die Remoteverbindung Socket beendet hat. In diesem Fall wird sofort ein Aufruf von Receive zurückgegeben, wobei null Bytes zurückgegeben werden.
Select gibt zurück, wenn mindestens einer der sockets von Interesse (die Sockets in den checkRead
Listen , checkWrite
und checkError
) die angegebenen Kriterien erfüllt, oder wenn der microSeconds
Parameter überschritten wird, je nachdem, was zuerst kommt. Die Einstellung microSeconds
auf -1 gibt ein unendliches Timeout an.
Wenn Sie einen nicht blockierenden Aufruf von Connecttätigen, bedeutet Schreibbarkeit, dass Sie eine erfolgreiche Verbindung hergestellt haben. Wenn Sie bereits eine Verbindung hergestellt haben, bedeutet Schreibbarkeit, dass alle Sendevorgänge ohne Blockierung erfolgreich sind.
Wenn Sie einen nicht blockierenden Aufruf von Connectausgeführt haben, identifiziert der checkerror
Parameter Sockets, die nicht erfolgreich verbunden wurden.
Hinweis
Verwenden Sie die Poll -Methode, wenn Sie nur die status eines einzelnen Socketbestimmen möchten.
Hinweis
Diese Methode kann bestimmte Arten von Verbindungsprobleme nicht erkennen, z. B. ein unterbrochenes Netzwerkkabel oder dass der Remotehost nicht ordnungsgemäß heruntergefahren wurde. Sie müssen versuchen, Daten zu senden oder zu empfangen, um diese Art von Fehlern zu erkennen.
Hinweis
Wenn Sie erhalten eine SocketException, verwenden die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode zu erhalten. Nachdem Sie diesen Code erhalten haben, finden Sie eine ausführliche Beschreibung des Fehlers in der Dokumentation zur Windows Sockets-API, Version 2 .
Weitere Informationen
Gilt für:
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für