Socket.ReceiveFrom Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee ontvangt u een datagram en slaat u het broneindpunt op.
Overloads
| Name | Description |
|---|---|
| ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint) |
Ontvangt het opgegeven aantal bytes aan gegevens op de opgegeven locatie van de gegevensbuffer, met behulp van het opgegeven SocketFlags, en slaat het eindpunt op. |
| ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint) |
Ontvangt het opgegeven aantal bytes in de gegevensbuffer, met behulp van de opgegeven SocketFlags, en slaat het eindpunt op. |
| ReceiveFrom(Byte[], SocketFlags, EndPoint) |
Ontvangt een datagram in de gegevensbuffer, met behulp van het opgegeven SocketFlags, en slaat het eindpunt op. |
| ReceiveFrom(Byte[], EndPoint) |
Ontvangt een datagram in de gegevensbuffer en slaat het eindpunt op. |
ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
Ontvangt het opgegeven aantal bytes aan gegevens op de opgegeven locatie van de gegevensbuffer, met behulp van het opgegeven SocketFlags, en slaat het eindpunt op.
public:
int ReceiveFrom(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom(byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * int * int * System.Net.Sockets.SocketFlags * EndPoint -> int
Public Function ReceiveFrom (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer
Parameters
- offset
- Int32
De positie in de buffer parameter voor het opslaan van de ontvangen gegevens.
- size
- Int32
Het aantal te ontvangen bytes.
- socketFlags
- SocketFlags
Een bitsgewijze combinatie van de SocketFlags waarden.
- remoteEP
- EndPoint
Een verwijzing naar een EndPoint van hetzelfde type als het eindpunt van de externe host die moet worden bijgewerkt bij geslaagde ontvangst.
Retouren
Het aantal bytes dat is ontvangen.
Uitzonderingen
offset is kleiner dan 0.
– of –
offset is groter dan de lengte van buffer.
– of –
size is kleiner dan 0.
– of –
size is groter dan de lengte van de buffer minwaarde van de offsetparameter.
socketFlags is geen geldige combinatie van waarden.
– of –
De LocalEndPoint eigenschap is niet ingesteld.
– of –
Er is een fout opgetreden bij het openen van de socket.
De Socket is gesloten.
Voorbeelden
In het volgende codevoorbeeld wordt een gegevensgram zonder verbinding ontvangen van een externe host. De offset, buffergrootte en SocketFlags worden doorgegeven aan de ReceiveFrom methode.
public static void ReceiveFrom4()
{
IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);
Socket s = new Socket(endPoint.Address.AddressFamily,
SocketType.Dgram,
ProtocolType.Udp);
// Creates an IpEndPoint to capture the identity of the sending host.
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint senderRemote = (EndPoint)sender;
// Binding is required with ReceiveFrom calls.
s.Bind(endPoint);
byte[] msg = new Byte[256];
Console.WriteLine("Waiting to receive datagrams from client...");
// This call blocks.
s.ReceiveFrom(msg, 0, msg.Length, SocketFlags.None, ref senderRemote);
s.Close();
}
Public Shared Sub ReceiveFrom4()
Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
' Creates an IpEndPoint to capture the identity of the sending host.
Dim sender As New IPEndPoint(IPAddress.Any, 0)
Dim senderRemote As EndPoint = CType(sender, EndPoint)
' Binding is required with ReceiveFrom calls.
s.Bind(endPoint)
Dim msg() As Byte = New [Byte](255) {}
Console.WriteLine("Waiting to receive datagrams from client...")
' This call blocks.
s.ReceiveFrom(msg, 0, msg.Length, SocketFlags.None, senderRemote)
s.Close()
End Sub
Opmerkingen
De ReceiveFrom methode leest gegevens in de buffer parameter, retourneert het aantal bytes dat is gelezen en legt het eindpunt van de externe host vast waaruit de gegevens zijn verzonden. Deze methode is handig als u verbindingloze datagrammen van een onbekende host of meerdere hosts wilt ontvangen.
Met verbindingsloze protocollen ReceiveFrom wordt het eerste enqueued datagram gelezen dat in de lokale netwerkbuffer is ontvangen. Als het datagram dat u ontvangt groter is dan de grootte, bufferzal de ReceiveFrom methode zoveel mogelijk van het bericht vullen buffer en een SocketException. Als u een onbetrouwbaar protocol gebruikt, gaan de overtollige gegevens verloren. Als u een betrouwbaar protocol gebruikt, worden de overtollige gegevens bewaard door de serviceprovider en kunt u deze ophalen door de ReceiveFrom methode aan te roepen met een grote buffer.
Als er geen gegevens beschikbaar zijn om te lezen, wordt de ReceiveFrom methode geblokkeerd totdat gegevens beschikbaar zijn. Als u zich in de niet-blokkerende modus bevindt en er geen gegevens beschikbaar zijn in de protocolstackbuffer, wordt de ReceiveFrom methode onmiddellijk voltooid en wordt er een SocketException. U kunt de Available eigenschap gebruiken om te bepalen of er gegevens beschikbaar zijn om te lezen. Als Available dit niet nul is, voert u de ontvangstbewerking opnieuw uit.
Hoewel ReceiveFrom het bedoeld is voor verbindingsloze protocollen, kunt u ook een verbindingsgeoriënteerd protocol gebruiken. Als u hiervoor kiest, moet u eerst een externe hostverbinding tot stand brengen door de Connect methode aan te roepen of een binnenkomende externe hostverbinding te accepteren door de methode aan te Accept roepen. Als u geen verbinding tot stand brengt of accepteert voordat u de ReceiveFrom methode aanroept, krijgt u een SocketException. U kunt ook een standaard externe host instellen voor een verbindingsloos protocol voordat u de ReceiveFrom methode aanroept.
Met verbindingsgeoriënteerde sockets ReceiveFrom worden zoveel gegevens gelezen als beschikbaar is tot de hoeveelheid bytes die door de size parameter is opgegeven. Als de externe host de Socket verbinding met de Shutdown methode afsluit en alle beschikbare gegevens zijn ontvangen, wordt de ReceiveFrom methode onmiddellijk voltooid en worden nul bytes geretourneerd.
Note
Voordat u aanroept ReceiveFrom, moet u het Socket expliciet verbinden met een lokaal eindpunt met behulp van de Bind methode. Als je dat niet doet, ReceiveFrom gooi dan een SocketException. Als u een SocketExceptionontvangt, gebruikt u de SocketException.ErrorCode eigenschap om de specifieke foutcode te verkrijgen. Nadat u deze code hebt verkregen, raadpleegt u de Windows Sockets versie 2 API-foutcode documentatie voor een gedetailleerde beschrijving van de fout.
Note
De gebruikte waarde moet overeenkomen met de AddressFamilyEndPoint gebruikte waarde in SendTo.ReceiveFromEndPointAddressFamily
Note
Dit lid voert traceringsgegevens uit wanneer u netwerktracering inschakelt in uw toepassing. Zie Network Tracing in .NET Framework voor meer informatie.
Zie ook
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Van toepassing op
ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)
Ontvangt het opgegeven aantal bytes in de gegevensbuffer, met behulp van de opgegeven SocketFlags, en slaat het eindpunt op.
public:
int ReceiveFrom(cli::array <System::Byte> ^ buffer, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom(byte[] buffer, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * int * System.Net.Sockets.SocketFlags * EndPoint -> int
Public Function ReceiveFrom (buffer As Byte(), size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer
Parameters
- size
- Int32
Het aantal te ontvangen bytes.
- socketFlags
- SocketFlags
Een bitsgewijze combinatie van de SocketFlags waarden.
- remoteEP
- EndPoint
Een verwijzing naar een EndPoint van hetzelfde type als het eindpunt van de externe host die moet worden bijgewerkt bij geslaagde ontvangst.
Retouren
Het aantal bytes dat is ontvangen.
Uitzonderingen
socketFlags is geen geldige combinatie van waarden.
– of –
De LocalEndPoint eigenschap is niet ingesteld.
– of –
Er treedt een fout op in het besturingssysteem tijdens het openen van de Socket.
De Socket is gesloten.
Een aanroeper in de aanroepstack beschikt niet over de vereiste machtigingen.
Voorbeelden
In het volgende codevoorbeeld wordt een gegevensgram zonder verbinding ontvangen van een externe host. De buffergrootte en SocketFlags worden doorgegeven aan de ReceiveFrom methode.
public static void ReceiveFrom3()
{
IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);
Socket s = new Socket(endPoint.Address.AddressFamily,
SocketType.Dgram,
ProtocolType.Udp);
// Creates an IPEndPoint to capture the identity of the sending host.
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint senderRemote = (EndPoint)sender;
// Binding is required with ReceiveFrom calls.
s.Bind(endPoint);
byte[] msg = new Byte[256];
Console.WriteLine("Waiting to receive datagrams from client...");
// This call blocks.
s.ReceiveFrom(msg, msg.Length, SocketFlags.None, ref senderRemote);
s.Close();
}
Public Shared Sub ReceiveFrom3()
Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
' Creates an IPEndPoint to capture the identity of the sending host.
Dim sender As New IPEndPoint(IPAddress.Any, 0)
Dim senderRemote As EndPoint = CType(sender, EndPoint)
' Binding is required with ReceiveFrom calls.
s.Bind(endPoint)
Dim msg() As Byte = New [Byte](255) {}
Console.WriteLine("Waiting to receive datagrams from client...")
' This call blocks.
s.ReceiveFrom(msg, msg.Length, SocketFlags.None, senderRemote)
s.Close()
End Sub
Opmerkingen
De ReceiveFrom methode leest gegevens in de buffer parameter, retourneert het aantal bytes dat is gelezen en legt het eindpunt van de externe host vast waaruit de gegevens zijn verzonden. Deze methode is handig als u verbindingloze datagrammen van een onbekende host of meerdere hosts wilt ontvangen.
Deze overbelasting vereist alleen dat u een ontvangstbuffer opgeeft, het aantal bytes dat u wilt ontvangen, de benodigde SocketFlagsen een EndPoint die de externe host vertegenwoordigt. De bufferverschil is standaard ingesteld op 0.
Met verbindingsloze protocollen ReceiveFrom wordt het eerste enqueued datagram gelezen dat in de lokale netwerkbuffer is ontvangen. Als het datagram dat u ontvangt groter is dan de grootte, bufferzal de ReceiveFrom methode zoveel mogelijk van het bericht vullen buffer en een SocketException. Als u een onbetrouwbaar protocol gebruikt, gaan de overtollige gegevens verloren. Als u een betrouwbaar protocol gebruikt, worden de overtollige gegevens bewaard door de serviceprovider en kunt u deze ophalen door de ReceiveFrom methode aan te roepen met een grote buffer.
Als er geen gegevens beschikbaar zijn om te lezen, wordt de ReceiveFrom methode geblokkeerd totdat gegevens beschikbaar zijn. Als u zich in de niet-blokkerende modus bevindt en er geen gegevens beschikbaar zijn in de protocolstackbuffer, wordt de ReceiveFrom methode onmiddellijk voltooid en wordt er een SocketException. U kunt de Available eigenschap gebruiken om te bepalen of er gegevens beschikbaar zijn om te lezen. Als Available dit niet nul is, voert u de ontvangstbewerking opnieuw uit.
Hoewel ReceiveFrom het bedoeld is voor verbindingsloze protocollen, kunt u ook een verbindingsgeoriënteerd protocol gebruiken. Als u hiervoor kiest, moet u eerst een externe hostverbinding tot stand brengen door de Connect methode aan te roepen of een binnenkomende externe hostverbinding te accepteren door de methode aan te Accept roepen. Als u geen verbinding tot stand brengt of accepteert voordat u de ReceiveFrom methode aanroept, krijgt u een SocketException. U kunt ook een standaard externe host instellen voor een verbindingsloos protocol voordat u de ReceiveFrom methode aanroept.
Met verbindingsgeoriënteerde sockets ReceiveFrom worden zoveel gegevens gelezen als beschikbaar is tot het aantal bytes dat is opgegeven door de size parameter. Als de externe host de Socket verbinding met de Shutdown methode afsluit en alle beschikbare gegevens zijn ontvangen, wordt de ReceiveFrom methode onmiddellijk voltooid en worden nul bytes geretourneerd.
Note
Voordat u aanroept ReceiveFrom, moet u het Socket expliciet verbinden met een lokaal eindpunt met behulp van de Bind methode. Als je dat niet doet, ReceiveFrom gooi dan een SocketException. Als u een SocketExceptionontvangt, gebruikt u de SocketException.ErrorCode eigenschap om de specifieke foutcode te verkrijgen. Nadat u deze code hebt verkregen, raadpleegt u de Windows Sockets versie 2 API-foutcode documentatie voor een gedetailleerde beschrijving van de fout.
Note
De gebruikte waarde moet overeenkomen met de AddressFamilyEndPoint gebruikte waarde in SendTo.ReceiveFromEndPointAddressFamily
Note
Dit lid voert traceringsgegevens uit wanneer u netwerktracering inschakelt in uw toepassing. Zie Network Tracing in .NET Framework voor meer informatie.
Zie ook
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Van toepassing op
ReceiveFrom(Byte[], SocketFlags, EndPoint)
Ontvangt een datagram in de gegevensbuffer, met behulp van het opgegeven SocketFlags, en slaat het eindpunt op.
public:
int ReceiveFrom(cli::array <System::Byte> ^ buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom(byte[] buffer, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * System.Net.Sockets.SocketFlags * EndPoint -> int
Public Function ReceiveFrom (buffer As Byte(), socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer
Parameters
- socketFlags
- SocketFlags
Een bitsgewijze combinatie van de SocketFlags waarden.
- remoteEP
- EndPoint
Een verwijzing naar een EndPoint van hetzelfde type als het eindpunt van de externe host die moet worden bijgewerkt bij geslaagde ontvangst.
Retouren
Het aantal bytes dat is ontvangen.
Uitzonderingen
Er is een fout opgetreden bij het openen van de socket.
De Socket is gesloten.
Een aanroeper in de aanroepstack beschikt niet over de vereiste machtigingen.
Voorbeelden
In het volgende codevoorbeeld wordt een gegevensgram zonder verbinding ontvangen van een externe host. SocketFlags worden doorgegeven aan de ReceiveFrom methode.
public static void ReceiveFrom2()
{
IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);
Socket s = new Socket(endPoint.Address.AddressFamily,
SocketType.Dgram,
ProtocolType.Udp);
// Creates an IpEndPoint to capture the identity of the sending host.
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint senderRemote = (EndPoint)sender;
// Binding is required with ReceiveFrom calls.
s.Bind(endPoint);
byte[] msg = new Byte[256];
Console.WriteLine("Waiting to receive datagrams from client...");
// This call blocks.
s.ReceiveFrom(msg, SocketFlags.None, ref senderRemote);
s.Close();
}
Public Shared Sub ReceiveFrom2()
Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
' Creates an IpEndPoint to capture the identity of the sending host.
Dim sender As New IPEndPoint(IPAddress.Any, 0)
Dim senderRemote As EndPoint = CType(sender, EndPoint)
' Binding is required with ReceiveFrom calls.
s.Bind(endPoint)
Dim msg() As Byte = New [Byte](255) {}
Console.WriteLine("Waiting to receive datagrams from client...")
' This call blocks.
s.ReceiveFrom(msg, SocketFlags.None, senderRemote)
s.Close()
End Sub
Opmerkingen
De ReceiveFrom methode leest gegevens in de buffer parameter, retourneert het aantal bytes dat is gelezen en legt het eindpunt van de externe host vast waaruit de gegevens zijn verzonden. Deze methode is handig als u verbindingloze datagrammen van een onbekende host of meerdere hosts wilt ontvangen.
Deze overbelasting vereist alleen dat u een ontvangstbuffer, de benodigde SocketFlagsen een EndPoint die de externe host vertegenwoordigt. De offset wordt standaard ingesteld op 0 en de grootte wordt standaard ingesteld op de lengte van de bufferparameter.
Note
Voordat u aanroept ReceiveFrom, moet u het Socket expliciet verbinden met een lokaal eindpunt met behulp van de Bind methode. Als je dat niet doet, ReceiveFrom gooi dan een SocketException.
Met verbindingsloze protocollen ReceiveFrom wordt het eerste enqueued datagram gelezen dat in de lokale netwerkbuffer is ontvangen. Als het datagram dat u ontvangt groter is dan de grootte, bufferzal de ReceiveFrom methode zoveel mogelijk van het bericht vullen buffer en een SocketException. Als u een onbetrouwbaar protocol gebruikt, gaan de overtollige gegevens verloren. Als u een betrouwbaar protocol gebruikt, worden de overtollige gegevens bewaard door de serviceprovider en kunt u deze ophalen door de ReceiveFrom methode aan te roepen met een grote buffer.
Als er geen gegevens beschikbaar zijn om te lezen, wordt de ReceiveFrom methode geblokkeerd totdat gegevens beschikbaar zijn. Als u zich in de niet-blokkerende modus bevindt en er geen gegevens beschikbaar zijn in de protocolstackbuffer, wordt de ReceiveFrom methode onmiddellijk voltooid en wordt er een SocketException. U kunt de Available eigenschap gebruiken om te bepalen of er gegevens beschikbaar zijn om te lezen. Als Available dit niet nul is, voert u de ontvangstbewerking opnieuw uit.
Hoewel ReceiveFrom het bedoeld is voor verbindingsloze protocollen, kunt u ook een verbindingsgeoriënteerd protocol gebruiken. Als u hiervoor kiest, moet u eerst een externe hostverbinding tot stand brengen door de Connect methode aan te roepen of een binnenkomende externe hostverbinding te accepteren door de methode aan te Accept roepen. Als u geen verbinding tot stand brengt of accepteert voordat u de ReceiveFrom methode aanroept, krijgt u een SocketException. U kunt ook een standaard externe host instellen voor een verbindingsloos protocol voordat u de ReceiveFrom methode aanroept.
Met verbindingsgeoriënteerde sockets ReceiveFrom worden zoveel gegevens gelezen als beschikbaar is tot de grootte van buffer. Als de externe host de Socket verbinding met de Shutdown methode afsluit en alle beschikbare gegevens zijn ontvangen, wordt de ReceiveFrom methode onmiddellijk voltooid en worden nul bytes geretourneerd.
Note
Als u een SocketExceptionontvangt, gebruikt u de SocketException.ErrorCode eigenschap om de specifieke foutcode te verkrijgen. Nadat u deze code hebt verkregen, raadpleegt u de Windows Sockets versie 2 API-foutcode documentatie voor een gedetailleerde beschrijving van de fout.
Note
De gebruikte waarde moet overeenkomen met de AddressFamilyEndPoint gebruikte waarde in SendTo.ReceiveFromEndPointAddressFamily
Note
Dit lid voert traceringsgegevens uit wanneer u netwerktracering inschakelt in uw toepassing. Zie Network Tracing in .NET Framework voor meer informatie.
Zie ook
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Van toepassing op
ReceiveFrom(Byte[], EndPoint)
Ontvangt een datagram in de gegevensbuffer en slaat het eindpunt op.
public:
int ReceiveFrom(cli::array <System::Byte> ^ buffer, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom(byte[] buffer, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * EndPoint -> int
Public Function ReceiveFrom (buffer As Byte(), ByRef remoteEP As EndPoint) As Integer
Parameters
- remoteEP
- EndPoint
Een verwijzing naar een EndPoint van hetzelfde type als het eindpunt van de externe host die moet worden bijgewerkt bij geslaagde ontvangst.
Retouren
Het aantal bytes dat is ontvangen.
Uitzonderingen
Er is een fout opgetreden bij het openen van de socket.
De Socket is gesloten.
Een aanroeper in de aanroepstack beschikt niet over de vereiste machtigingen.
Voorbeelden
In het volgende codevoorbeeld wordt een gegevensgram zonder verbinding ontvangen van een externe host.
public static void ReceiveFrom1()
{
IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);
Socket s = new Socket(endPoint.Address.AddressFamily,
SocketType.Dgram,
ProtocolType.Udp);
// Creates an IPEndPoint to capture the identity of the sending host.
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint senderRemote = (EndPoint)sender;
// Binding is required with ReceiveFrom calls.
s.Bind(endPoint);
byte[] msg = new Byte[256];
Console.WriteLine("Waiting to receive datagrams from client...");
// This call blocks.
s.ReceiveFrom(msg, ref senderRemote);
s.Close();
}
Public Shared Sub ReceiveFrom1()
Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
' Creates an IPEndPoint to capture the identity of the sending host.
Dim sender As New IPEndPoint(IPAddress.Any, 0)
Dim senderRemote As EndPoint = CType(sender, EndPoint)
' Binding is required with ReceiveFrom calls.
s.Bind(endPoint)
Dim msg() As Byte = New [Byte](255) {}
Console.WriteLine("Waiting to receive datagrams from client...")
' This call blocks.
s.ReceiveFrom(msg, senderRemote)
s.Close()
End Sub
Opmerkingen
De ReceiveFrom methode leest gegevens in de buffer parameter, retourneert het aantal bytes dat is gelezen en legt het eindpunt van de externe host vast waaruit de gegevens zijn verzonden. Deze methode is handig als u verbindingloze datagrammen van een onbekende host of meerdere hosts wilt ontvangen.
Deze overbelasting vereist alleen dat u een ontvangst bufferen een EndPoint die de externe host vertegenwoordigt. De bufferverschil is standaard ingesteld op 0. De grootte wordt standaard ingesteld op de lengte van de buffer parameter en de socketFlags standaardwaarde None.
Note
Voordat u aanroept ReceiveFrom, moet u het Socket expliciet verbinden met een lokaal eindpunt met behulp van de Bind methode. Als je dat niet doet, ReceiveFrom gooi dan een SocketException.
Met verbindingsloze protocollen ReceiveFrom wordt het eerste enqueued datagram gelezen dat in de lokale netwerkbuffer is ontvangen. Als het datagram dat u ontvangt groter is dan de grootte, bufferzal de ReceiveFrom methode zoveel mogelijk van het bericht vullen buffer en een SocketException. Als u een onbetrouwbaar protocol gebruikt, gaan de overtollige gegevens verloren. Als u een betrouwbaar protocol gebruikt, worden de overtollige gegevens bewaard door de serviceprovider en kunt u deze ophalen door de ReceiveFrom methode aan te roepen met een grote buffer.
Als er geen gegevens beschikbaar zijn om te lezen, wordt de ReceiveFrom methode geblokkeerd totdat gegevens beschikbaar zijn. Als u zich in de niet-blokkerende modus bevindt en er geen gegevens beschikbaar zijn in de protocolstackbuffer, wordt de ReceiveFrom methode onmiddellijk voltooid en wordt er een SocketException. U kunt de Available eigenschap gebruiken om te bepalen of er gegevens beschikbaar zijn om te lezen. Als Available dit niet nul is, voert u de ontvangstbewerking opnieuw uit.
Hoewel ReceiveFrom het bedoeld is voor verbindingsloze protocollen, kunt u ook een verbindingsgeoriënteerd protocol gebruiken. Als u hiervoor kiest, moet u eerst een externe hostverbinding tot stand brengen door de Connect methode aan te roepen of een binnenkomende externe hostverbinding te accepteren door de methode aan te Accept roepen. Als u geen verbinding tot stand brengt of accepteert voordat u de ReceiveFrom methode aanroept, krijgt u een SocketException. U kunt ook een standaard externe host instellen voor een verbindingsloos protocol voordat u de ReceiveFrom methode aanroept.
Met verbindingsgeoriënteerde sockets ReceiveFrom worden zoveel gegevens gelezen als beschikbaar is tot de grootte van buffer. Als de externe host de Socket verbinding met de Shutdown methode afsluit en alle beschikbare gegevens zijn ontvangen, wordt de ReceiveFrom methode onmiddellijk voltooid en worden nul bytes geretourneerd.
Note
Als u een SocketExceptionontvangt, gebruikt u de SocketException.ErrorCode eigenschap om de specifieke foutcode te verkrijgen. Nadat u deze code hebt verkregen, raadpleegt u de Windows Sockets versie 2 API-foutcode documentatie voor een gedetailleerde beschrijving van de fout.
Note
De gebruikte waarde moet overeenkomen met de AddressFamilyEndPoint gebruikte waarde in SendTo.ReceiveFromEndPointAddressFamily
Note
Dit lid voert traceringsgegevens uit wanneer u netwerktracering inschakelt in uw toepassing. Zie Network Tracing in .NET Framework voor meer informatie.