Socket.ReceiveFrom 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
接收資料包以及儲存來源端點。
多載
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
使用指定的 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 值的位元組合。
傳回
收到的位元組數目。
例外狀況
呼叫堆疊中的呼叫端沒有所需的使用權限。
範例
下列程式代碼範例會從遠端主機接收無連接數據報。 緩衝區大小, 和 SocketFlags 會傳遞至 ReceiveFrom 方法。
static void ReceiveFrom3()
{
IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );
Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
SocketType::Dgram,
ProtocolType::Udp );
// Creates an IPEndPoint to capture the identity of the sending host.
IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
// Binding is required with ReceiveFrom calls.
s->Bind( endPoint );
array<Byte>^ msg = gcnew array<Byte>(256);
Console::WriteLine( "SWaiting to receive datagrams from client..." );
// This call blocks.
s->ReceiveFrom( msg, msg->Length, SocketFlags::None, senderRemote );
s->Close();
}
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之前,您必須使用 Bind 方法明確地將 系結Socket至本機端點。 如果您未這麼做, ReceiveFrom 將會擲回 SocketException。 如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
AddressFamily EndPoint中ReceiveFrom所使用的 必須符合 EndPointAddressFamily 中SendTo所使用的 。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .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
使用指定的 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 值的位元組合。
傳回
收到的位元組數目。
例外狀況
offset
小於 0。
-或-
offset
大於 buffer
的長度。
-或-
size
小於 0。
-或-
size
大於 buffer
的長度減去位移參數的值。
範例
下列程式代碼範例會從遠端主機接收無連接數據報。 位移、緩衝區大小和 會 SocketFlags 傳遞至 ReceiveFrom 方法。
static void ReceiveFrom4()
{
IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );
Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
SocketType::Dgram,
ProtocolType::Udp );
// Creates an IpEndPoint to capture the identity of the sending host.
IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
// Binding is required with ReceiveFrom calls.
s->Bind( endPoint );
array<Byte>^ msg = gcnew array<Byte>(256);
Console::WriteLine( "SWaiting to receive datagrams from client..." );
// This call blocks.
s->ReceiveFrom( msg, 0, msg->Length, SocketFlags::None, senderRemote );
s->Close();
}
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之前,您必須使用 Bind 方法明確地將 系結Socket至本機端點。 如果您未這麼做, ReceiveFrom 將會擲回 SocketException。 如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
AddressFamily EndPoint中ReceiveFrom所使用的 必須符合 EndPointAddressFamily 中SendTo所使用的 。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。
另請參閱
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
適用於
ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)
- 來源:
- 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
為 null
。
嘗試存取通訊端時發生錯誤。
適用於
ReceiveFrom(Byte[], SocketFlags, EndPoint)
- 來源:
- 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 值的位元組合。
傳回
收到的位元組數目。
例外狀況
嘗試存取通訊端時發生錯誤。
呼叫堆疊中的呼叫端沒有所需的使用權限。
範例
下列程式代碼範例會從遠端主機接收無連接數據報。 SocketFlags 會傳遞至 ReceiveFrom 方法。
static void ReceiveFrom2()
{
IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );
Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
SocketType::Dgram,
ProtocolType::Udp );
// Creates an IpEndPoint to capture the identity of the sending host.
IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
// Binding is required with ReceiveFrom calls.
s->Bind( endPoint );
array<Byte>^ msg = gcnew array<Byte>(256);
Console::WriteLine( "Waiting to receive datagrams from client..." );
// This call blocks.
s->ReceiveFrom( msg, SocketFlags::None, senderRemote );
s->Close();
}
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之前,您必須使用 Bind 方法明確地將 系結Socket至本機端點。 如果您未這麼做, 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 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
AddressFamily EndPoint中ReceiveFrom所使用的 必須符合 EndPointAddressFamily 中SendTo所使用的 。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。
另請參閱
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
適用於
ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)
- 來源:
- 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
。
嘗試存取通訊端時發生錯誤。
適用於
ReceiveFrom(Span<Byte>, EndPoint)
- 來源:
- 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
為 null
。
嘗試存取通訊端時發生錯誤。
適用於
ReceiveFrom(Byte[], EndPoint)
- 來源:
- 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
參數
傳回
收到的位元組數目。
例外狀況
嘗試存取通訊端時發生錯誤。
呼叫堆疊中的呼叫端沒有所需的使用權限。
範例
下列程式代碼範例會從遠端主機接收無連接數據報。
static void ReceiveFrom1()
{
IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );
Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
SocketType::Dgram,
ProtocolType::Udp );
// Creates an IPEndPoint to capture the identity of the sending host.
IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
// Binding is required with ReceiveFrom calls.
s->Bind( endPoint );
array<Byte>^ msg = gcnew array<Byte>(256);
Console::WriteLine( "Waiting to receive datagrams from client..." );
// This call blocks.
s->ReceiveFrom( msg, senderRemote );
s->Close();
}
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之前,您必須使用 Bind 方法明確地將 系結Socket至本機端點。 如果您未這麼做, 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 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
AddressFamily EndPoint中ReceiveFrom所使用的 必須符合 EndPointAddressFamily 中SendTo所使用的 。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。