Sdílet prostřednictvím


Socket.Select Metoda

Definice

Přetížení

Name Description
Select(IList, IList, IList, TimeSpan)

Určuje stav jednoho nebo více soketů.

Select(IList, IList, IList, Int32)

Určuje stav jednoho nebo více soketů.

Select(IList, IList, IList, TimeSpan)

Zdroj:
Socket.cs
Zdroj:
Socket.cs
Zdroj:
Socket.cs
Zdroj:
Socket.cs
Zdroj:
Socket.cs

Určuje stav jednoho nebo více soketů.

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)

Parametry

checkRead
IList

Socket InstanceIList, které se mají zkontrolovat čitelnost.

checkWrite
IList

Socket InstanceIList, které se mají zkontrolovat zapisovatelnost.

checkError
IList

Socket InstanceIList, které se mají zkontrolovat chyby.

timeout
TimeSpan

Hodnota časového limitu. Hodnota rovna -1 mikrosekund označuje nekonečný časový limit.

Výjimky

Parametr checkRead, checkWritea checkError parametry jsou všechny null nebo prázdné. Alespoň jeden z checkRead, checkWritenebo checkError musí obsahovat alespoň jeden Socket.

Parametr checkRead, checkWritenebo checkError obsahuje příliš mnoho soketů.

Byla timeout menší než -1 mikrosekund nebo větší než MaxValue mikrosekundy.

Při pokusu o přístup k soketu došlo k chybě.

Jeden nebo více soketů bylo uvolněno.

Platí pro

Select(IList, IList, IList, Int32)

Zdroj:
Socket.cs
Zdroj:
Socket.cs
Zdroj:
Socket.cs
Zdroj:
Socket.cs
Zdroj:
Socket.cs

Určuje stav jednoho nebo více soketů.

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)

Parametry

checkRead
IList

Socket InstanceIList, které se mají zkontrolovat čitelnost.

checkWrite
IList

Socket InstanceIList, které se mají zkontrolovat zapisovatelnost.

checkError
IList

Socket InstanceIList, které se mají zkontrolovat chyby.

microSeconds
Int32

Hodnota časového limitu v mikrosekundách. Hodnota -1 označuje nekonečný časový limit.

Výjimky

Parametr checkRead, checkWritea checkError parametry jsou všechny null nebo prázdné. Alespoň jeden z checkRead, checkWritenebo checkError musí obsahovat alespoň jeden Socket.

Při pokusu o přístup k soketu došlo k chybě.

.NET 5 a novější: Jeden nebo více soketů se odstraní.

Parametr checkRead, checkWritenebo checkError obsahuje příliš mnoho soketů.

Příklady

Následující příklad kódu používá Select k určení, které naslouchácí sokety mají požadavek na připojení.

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

Poznámky

Select je statická metoda, která určuje stav jedné nebo více Socket instancí. Před použitím Select metody je nutné umístit jeden nebo více soketů do jednoho IList nebo více soketů. Zkontrolujte čitelnost voláním Select parametru IList jako parametru checkRead . Pokud chcete zkontrolovat zapisovatelnost soketů, použijte checkWrite parametr. K detekci chybových podmínek použijte checkError. Po volání SelectIList se vyplní pouze ty sokety, které splňují podmínky.

Pokud jste ve stavu naslouchání, čitelnost znamená, že volání, které Accept bude úspěšné bez blokování. Pokud jste připojení už přijali, čitelnost znamená, že data jsou k dispozici pro čtení. V těchto případech budou všechny operace příjmu úspěšné bez blokování. Čitelnost může také znamenat, jestli vzdálené připojení Socket vypnulo. V takovém případě se volání, které Receive se vrátí okamžitě, s nulovými bajty vrácenými.

Select vrátí, pokud alespoň jeden soket zájmu (sokety v checkRead, checkWritea checkError seznamy) splňuje jeho zadaná kritéria, nebo microSeconds je překročen parametr podle toho, co nastane dříve. Nastavení microSeconds pro -1 určuje nekonečný časový limit.

Pokud provedete neblokující volání Connect, zapisovatelnost znamená, že jste se úspěšně připojili. Pokud už máte vytvořené připojení, zapisovatelnost znamená, že všechny operace odesílání budou úspěšné bez blokování.

Pokud jste provedli neblokující volání Connect, checkerror parametr identifikuje sokety, které nebyly úspěšně připojeny.

Poznámka

Použijte metodu Poll , pokud chcete určit pouze stav jednoho Socket.

Poznámka

Tato metoda nemůže rozpoznat určité druhy problémů s připojením, jako je poškozený síťový kabel nebo že vzdálený hostitel byl nerušeně vypnutý. Pokud chcete zjistit tyto druhy chyb, musíte se pokusit odesílat nebo přijímat data.

Poznámka

Pokud se zobrazí kód SocketExceptionchyby, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Po získání tohoto kódu si přečtěte dokumentaci k chybě rozhraní API rozhraní WINDOWS Sockets verze 2 , kde najdete podrobný popis chyby.

Viz také

Platí pro