Socket.ReceiveFrom Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает диаграмму данных и сохраняет исходную конечную точку.
Перегрузки
| Имя | Описание |
|---|---|
| ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint) |
Получает указанное число байтов в буфер данных, используя указанный SocketFlagsобъект, и сохраняет конечную точку. |
| ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint) |
Получает указанное количество байтов данных в указанном расположении буфера данных, используя указанное SocketFlagsзначение, и сохраняет конечную точку. |
| ReceiveFrom(Span<Byte>, SocketFlags, EndPoint) |
Получает диаграмму данных в буфер данных, используя указанный SocketFlagsобъект, и сохраняет конечную точку. |
| ReceiveFrom(Byte[], SocketFlags, EndPoint) |
Получает диаграмму данных в буфер данных, используя указанный SocketFlagsобъект, и сохраняет конечную точку. |
| ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress) |
Получает диаграмму данных в буфер данных, используя указанный SocketFlagsобъект, и сохраняет конечную точку. |
| ReceiveFrom(Span<Byte>, EndPoint) |
Получает диаграмму данных в буфер данных и сохраняет конечную точку. |
| ReceiveFrom(Byte[], EndPoint) |
Получает диаграмму данных в буфер данных и сохраняет конечную точку. |
ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает указанное число байтов в буфер данных, используя указанный SocketFlagsобъект, и сохраняет конечную точку.
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
Параметры
- size
- Int32
Число получаемых байтов.
- socketFlags
- SocketFlags
Побитовое сочетание значений SocketFlags .
- remoteEP
- EndPoint
Ссылка на тот EndPoint же тип, что и конечная точка удаленного узла, которую необходимо обновить при успешном получении.
Возвращаемое значение
Количество полученных байтов.
Исключения
socketFlags не является допустимым сочетанием значений.
–или–
Свойство LocalEndPoint не задано.
–или–
При доступе к операционной Socketсистеме возникает ошибка.
Он Socket был закрыт.
Вызывающий объект в стеке вызовов не имеет необходимых разрешений.
Примеры
В следующем примере кода от удаленного узла получается без подключения диаграмма данных. Размер буфера и SocketFlags передается методу ReceiveFrom .
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
Комментарии
Метод ReceiveFrom считывает данные в buffer параметр, возвращает количество байтов, успешно считываемых и записывает конечную точку удаленного узла, из которой были отправлены данные. Этот метод полезен, если вы планируете получать без подключения диаграммы данных от неизвестного узла или нескольких узлов.
Эта перегрузка требует только предоставления буфера получения, количества байтов, SocketFlagsнеобходимых и EndPoint представляющих удаленный узел. Смещение буфера по умолчанию — 0.
При использовании протоколов без подключения будет считываться первая заквеченная диаграмма данных, ReceiveFrom полученная в локальный сетевой буфер. Если полученная диаграмма данных превышает размер buffer, ReceiveFrom метод заполняется buffer максимальной частью сообщения и создает исключение SocketException. Если вы используете ненадежный протокол, лишние данные будут потеряны. Если вы используете надежный протокол, избыточные данные будут храниться поставщиком услуг, и его можно получить, вызвав ReceiveFrom метод с достаточно большим буфером.
Если данные недоступны для чтения, метод блокируется до тех пор, ReceiveFrom пока данные не будут доступны. Если вы находитесь в режиме без блокировки, и в буфере стека протоколов отсутствуют данные, ReceiveFrom метод завершится немедленно и вызовет исключение SocketException. Свойство можно использовать Available для определения доступности данных для чтения. Если Available значение не равно нулю, повторите операцию получения.
Хотя ReceiveFrom он предназначен для протоколов без подключения, можно также использовать протокол, ориентированный на подключение. Если вы решили сделать это, сначала необходимо установить подключение к удаленному узлу путем вызова Connect метода или принять входящие подключения к удаленному Accept узлу, вызвав метод. Если вы не устанавливаете или не принимаете подключение перед вызовом ReceiveFrom метода, вы получите .SocketException Вы также можете установить удаленный узел по умолчанию для протокола без подключения перед вызовом ReceiveFrom метода.
При использовании сокетов, ориентированных на подключение, считывает столько данных, ReceiveFrom сколько доступно до количества байтов, указанных параметром size . Если удаленный узел завершает Socket подключение к Shutdown методу, а все доступные данные получены, ReceiveFrom метод завершится немедленно и возвращает ноль байтов.
Замечание
Перед вызовом ReceiveFromнеобходимо явно привязать Socket к локальной конечной точке с помощью Bind метода. Если вы этого не делаете, ReceiveFrom будет выбросать SocketException. При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API сокетов Windows версии 2 , чтобы получить подробное описание ошибки.
Замечание
Используемое значение должно соответствовать AddressFamily используемому EndPointSendTo.ReceiveFromAddressFamilyEndPoint
Замечание
Этот элемент выводит сведения о трассировке при включении трассировки сети в приложении. Дополнительные сведения см. в разделе "Трассировка сети" в .NET Framework.
См. также раздел
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Применяется к
ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает указанное количество байтов данных в указанном расположении буфера данных, используя указанное SocketFlagsзначение, и сохраняет конечную точку.
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
Параметры
- offset
- Int32
Позиция в параметре buffer для хранения полученных данных.
- size
- Int32
Число получаемых байтов.
- socketFlags
- SocketFlags
Побитовое сочетание значений SocketFlags .
- remoteEP
- EndPoint
Ссылка на тот EndPoint же тип, что и конечная точка удаленного узла, которую необходимо обновить при успешном получении.
Возвращаемое значение
Количество полученных байтов.
Исключения
offset меньше 0.
–или–
offset больше длины buffer.
–или–
size меньше 0.
–или–
size больше длины buffer минус значения параметра смещения.
socketFlags не является допустимым сочетанием значений.
–или–
Свойство LocalEndPoint не задано.
–или–
Произошла ошибка при попытке доступа к сокету.
Он Socket был закрыт.
Примеры
В следующем примере кода от удаленного узла получается без подключения диаграмма данных. Смещение, размер буфера и SocketFlags передается методу ReceiveFrom .
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
Комментарии
Метод ReceiveFrom считывает данные в buffer параметр, возвращает количество байтов, успешно считываемых и записывает конечную точку удаленного узла, из которой были отправлены данные. Этот метод полезен, если вы планируете получать без подключения диаграммы данных от неизвестного узла или нескольких узлов.
При использовании протоколов без подключения будет считываться первая заквеченная диаграмма данных, ReceiveFrom полученная в локальный сетевой буфер. Если полученная диаграмма данных превышает размер buffer, ReceiveFrom метод заполняется buffer максимальной частью сообщения и создает исключение SocketException. Если вы используете ненадежный протокол, лишние данные будут потеряны. Если вы используете надежный протокол, избыточные данные будут храниться поставщиком услуг, и его можно получить, вызвав ReceiveFrom метод с достаточно большим буфером.
Если данные недоступны для чтения, метод блокируется до тех пор, ReceiveFrom пока данные не будут доступны. Если вы находитесь в режиме без блокировки, и в буфере стека протоколов отсутствуют данные, ReceiveFrom метод завершится немедленно и вызовет исключение SocketException. Свойство можно использовать Available для определения доступности данных для чтения. Если Available значение не равно нулю, повторите операцию получения.
Хотя ReceiveFrom он предназначен для протоколов без подключения, можно также использовать протокол, ориентированный на подключение. Если вы решили сделать это, сначала необходимо установить подключение к удаленному узлу путем вызова Connect метода или принять входящие подключения к удаленному Accept узлу, вызвав метод. Если вы не устанавливаете или не принимаете подключение перед вызовом ReceiveFrom метода, вы получите .SocketException Вы также можете установить удаленный узел по умолчанию для протокола без подключения перед вызовом ReceiveFrom метода.
При использовании сокетов, ориентированных на подключение, считывает столько данных, ReceiveFrom сколько доступно до количества байтов, указанных параметром size . Если удаленный узел завершает Socket подключение к Shutdown методу, а все доступные данные получены, ReceiveFrom метод завершится немедленно и возвращает ноль байтов.
Замечание
Перед вызовом ReceiveFromнеобходимо явно привязать Socket к локальной конечной точке с помощью Bind метода. Если вы этого не делаете, ReceiveFrom будет выбросать SocketException. При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API сокетов Windows версии 2 , чтобы получить подробное описание ошибки.
Замечание
Используемое значение должно соответствовать AddressFamily используемому EndPointSendTo.ReceiveFromAddressFamilyEndPoint
Замечание
Этот элемент выводит сведения о трассировке при включении трассировки сети в приложении. Дополнительные сведения см. в разделе "Трассировка сети" в .NET Framework.
См. также раздел
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Применяется к
ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает диаграмму данных в буфер данных, используя указанный SocketFlagsобъект, и сохраняет конечную точку.
public:
int ReceiveFrom(Span<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom(Span<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : Span<byte> * System.Net.Sockets.SocketFlags * EndPoint -> int
Public Function ReceiveFrom (buffer As Span(Of Byte), socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer
Параметры
- socketFlags
- SocketFlags
Побитовое сочетание значений SocketFlags .
- remoteEP
- EndPoint
Ссылка на тот EndPoint же тип, что и конечная точка удаленного узла, которую необходимо обновить при успешном получении.
Возвращаемое значение
Количество полученных байтов.
Исключения
remoteEP равно null.
Произошла ошибка при попытке доступа к сокету.
Он Socket был закрыт.
Применяется к
ReceiveFrom(Byte[], SocketFlags, EndPoint)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает диаграмму данных в буфер данных, используя указанный SocketFlagsобъект, и сохраняет конечную точку.
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
Параметры
- socketFlags
- SocketFlags
Побитовое сочетание значений SocketFlags .
- remoteEP
- EndPoint
Ссылка на тот EndPoint же тип, что и конечная точка удаленного узла, которую необходимо обновить при успешном получении.
Возвращаемое значение
Количество полученных байтов.
Исключения
Произошла ошибка при попытке доступа к сокету.
Он Socket был закрыт.
Вызывающий объект в стеке вызовов не имеет необходимых разрешений.
Примеры
В следующем примере кода от удаленного узла получается без подключения диаграмма данных. SocketFlags передаются методу ReceiveFrom .
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
Комментарии
Метод ReceiveFrom считывает данные в buffer параметр, возвращает количество байтов, успешно считываемых и записывает конечную точку удаленного узла, из которой были отправлены данные. Этот метод полезен, если вы планируете получать без подключения диаграммы данных от неизвестного узла или нескольких узлов.
Эта перегрузка требует только предоставления буфера получения, необходимого SocketFlagsи EndPoint представляющего удаленный узел. Смещение по умолчанию составляет 0, а размер по умолчанию — длину параметра буфера.
Замечание
Перед вызовом ReceiveFromнеобходимо явно привязать Socket к локальной конечной точке с помощью Bind метода. Если вы этого не делаете, ReceiveFrom будет выбросать SocketException.
При использовании протоколов без подключения будет считываться первая заквеченная диаграмма данных, ReceiveFrom полученная в локальный сетевой буфер. Если полученная диаграмма данных превышает размер buffer, ReceiveFrom метод заполняется buffer максимальной частью сообщения и создает исключение SocketException. Если вы используете ненадежный протокол, лишние данные будут потеряны. Если вы используете надежный протокол, избыточные данные будут храниться поставщиком услуг, и его можно получить, вызвав ReceiveFrom метод с достаточно большим буфером.
Если данные недоступны для чтения, метод блокируется до тех пор, ReceiveFrom пока данные не будут доступны. Если вы находитесь в режиме без блокировки, и в буфере стека протоколов отсутствуют данные, ReceiveFrom метод завершится немедленно и вызовет исключение SocketException. Свойство можно использовать Available для определения доступности данных для чтения. Если Available значение не равно нулю, повторите операцию получения.
Хотя ReceiveFrom он предназначен для протоколов без подключения, можно также использовать протокол, ориентированный на подключение. Если вы решили сделать это, сначала необходимо установить подключение к удаленному узлу путем вызова Connect метода или принять входящие подключения к удаленному Accept узлу, вызвав метод. Если вы не устанавливаете или не принимаете подключение перед вызовом ReceiveFrom метода, вы получите .SocketException Вы также можете установить удаленный узел по умолчанию для протокола без подключения перед вызовом ReceiveFrom метода.
При использовании сокетов, ориентированных на подключение, будет считывать столько данных, ReceiveFrom сколько доступно до размера buffer. Если удаленный узел завершает Socket подключение к Shutdown методу, а все доступные данные получены, ReceiveFrom метод завершится немедленно и возвращает ноль байтов.
Замечание
При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API сокетов Windows версии 2 , чтобы получить подробное описание ошибки.
Замечание
Используемое значение должно соответствовать AddressFamily используемому EndPointSendTo.ReceiveFromAddressFamilyEndPoint
Замечание
Этот элемент выводит сведения о трассировке при включении трассировки сети в приложении. Дополнительные сведения см. в разделе "Трассировка сети" в .NET Framework.
См. также раздел
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Применяется к
ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает диаграмму данных в буфер данных, используя указанный SocketFlagsобъект, и сохраняет конечную точку.
public:
int ReceiveFrom(Span<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::SocketAddress ^ receivedAddress);
public int ReceiveFrom(Span<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.SocketAddress receivedAddress);
member this.ReceiveFrom : Span<byte> * System.Net.Sockets.SocketFlags * System.Net.SocketAddress -> int
Public Function ReceiveFrom (buffer As Span(Of Byte), socketFlags As SocketFlags, receivedAddress As SocketAddress) As Integer
Параметры
- socketFlags
- SocketFlags
Побитовое сочетание значений SocketFlags .
- receivedAddress
- SocketAddress
Экземпляр SocketAddress , который обновляется со значением удаленного однорангового узла при возврате этого метода.
Возвращаемое значение
Количество полученных байтов.
Исключения
receivedAddress равно null.
Произошла ошибка при попытке доступа к сокету.
Он Socket был закрыт.
Применяется к
ReceiveFrom(Span<Byte>, EndPoint)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает диаграмму данных в буфер данных и сохраняет конечную точку.
public:
int ReceiveFrom(Span<System::Byte> buffer, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom(Span<byte> buffer, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : Span<byte> * EndPoint -> int
Public Function ReceiveFrom (buffer As Span(Of Byte), ByRef remoteEP As EndPoint) As Integer
Параметры
- remoteEP
- EndPoint
Ссылка на тот EndPoint же тип, что и конечная точка удаленного узла, которую необходимо обновить при успешном получении.
Возвращаемое значение
Количество полученных байтов.
Исключения
remoteEP равно null.
Произошла ошибка при попытке доступа к сокету.
Он Socket был закрыт.
Применяется к
ReceiveFrom(Byte[], EndPoint)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает диаграмму данных в буфер данных и сохраняет конечную точку.
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
Параметры
- remoteEP
- EndPoint
Ссылка на тот EndPoint же тип, что и конечная точка удаленного узла, которую необходимо обновить при успешном получении.
Возвращаемое значение
Количество полученных байтов.
Исключения
Произошла ошибка при попытке доступа к сокету.
Он Socket был закрыт.
Вызывающий объект в стеке вызовов не имеет необходимых разрешений.
Примеры
В следующем примере кода от удаленного узла получается без подключения диаграмма данных.
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
Комментарии
Метод ReceiveFrom считывает данные в buffer параметр, возвращает количество байтов, успешно считываемых и записывает конечную точку удаленного узла, из которой были отправлены данные. Этот метод полезен, если вы планируете получать без подключения диаграммы данных от неизвестного узла или нескольких узлов.
Эта перегрузка требует только предоставления получения bufferи EndPoint представления удаленного узла. Смещение буфера по умолчанию — 0. Размер по умолчанию определяет длину buffer параметра и socketFlags значение по умолчанию None.
Замечание
Перед вызовом ReceiveFromнеобходимо явно привязать Socket к локальной конечной точке с помощью Bind метода. Если вы этого не делаете, ReceiveFrom будет выбросать SocketException.
При использовании протоколов без подключения будет считываться первая заквеченная диаграмма данных, ReceiveFrom полученная в локальный сетевой буфер. Если полученная диаграмма данных превышает размер buffer, ReceiveFrom метод заполняется buffer максимальной частью сообщения и создает исключение SocketException. Если вы используете ненадежный протокол, лишние данные будут потеряны. Если вы используете надежный протокол, избыточные данные будут храниться поставщиком услуг, и его можно получить, вызвав ReceiveFrom метод с достаточно большим буфером.
Если данные недоступны для чтения, метод блокируется до тех пор, ReceiveFrom пока данные не будут доступны. Если вы находитесь в режиме без блокировки, и в буфере стека протоколов отсутствуют данные, ReceiveFrom метод завершится немедленно и вызовет исключение SocketException. Свойство можно использовать Available для определения доступности данных для чтения. Если Available значение не равно нулю, повторите операцию получения.
Хотя ReceiveFrom он предназначен для протоколов без подключения, можно также использовать протокол, ориентированный на подключение. Если вы решили сделать это, сначала необходимо установить подключение к удаленному узлу путем вызова Connect метода или принять входящие подключения к удаленному Accept узлу, вызвав метод. Если вы не устанавливаете или не принимаете подключение перед вызовом ReceiveFrom метода, вы получите .SocketException Вы также можете установить удаленный узел по умолчанию для протокола без подключения перед вызовом ReceiveFrom метода.
При использовании сокетов, ориентированных на подключение, будет считывать столько данных, ReceiveFrom сколько доступно до размера buffer. Если удаленный узел завершает Socket подключение к Shutdown методу, а все доступные данные получены, ReceiveFrom метод завершится немедленно и возвращает ноль байтов.
Замечание
При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API сокетов Windows версии 2 , чтобы получить подробное описание ошибки.
Замечание
Используемое значение должно соответствовать AddressFamily используемому EndPointSendTo.ReceiveFromAddressFamilyEndPoint
Замечание
Этот элемент выводит сведения о трассировке при включении трассировки сети в приложении. Дополнительные сведения см. в разделе "Трассировка сети" в .NET Framework.