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.
War timeout
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 lauschenden Sockets über eine Verbindungsanforderung verfügen.
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 einen oder mehrere Sockets in einem platzieren, IList bevor Sie die Select -Methode verwenden können. Überprüfen Sie die Lesbarkeit, indem Sie mit dem IList -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 Aufrufen Selectvon wird nur IList mit den Sockets gefüllt, die die Bedingungen erfüllen.
Wenn Sie sich in einem Lauschzustand befinden, bedeutet die Lesbarkeit, dass ein Aufruf von Accept ohne Blockierung erfolgreich ist. Wenn Sie die Verbindung bereits akzeptiert haben, bedeutet die 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 wurde. In diesem Fall wird ein Aufruf von Receive sofort zurückgegeben, wobei null Bytes zurückgegeben werden.
Select gibt zurück, wenn mindestens einer der relevanten Sockets (die Sockets in den checkRead
Listen , checkWrite
und checkError
) die angegebenen Kriterien erfüllt oder der microSeconds
Parameter überschritten wird, je nachdem, was zuerst eintritt. Die Einstellung microSeconds
auf -1 gibt ein unbegrenztes Timeout an.
Wenn Sie einen nicht blockierenden Aufruf von Connectausführen, bedeutet Schreibbarkeit, dass Sie erfolgreich eine Verbindung hergestellt haben. Wenn Sie bereits eine Verbindung hergestellt haben, bedeutet Schreibbarkeit, dass alle Sendevorgänge ohne Blockierung erfolgreich ausgeführt werden.
Wenn Sie einen nicht blockierenden Aufruf von Connectdurchgefü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 beschädigtes 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 in der Dokumentation zu Windows Sockets Version 2-API-Fehlercode eine ausführliche Beschreibung des Fehlers.
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