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

使用指定的 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

參數

buffer
Byte[]

類型 Byte 的陣列,此為接收資料的儲存位置。

size
Int32

要接收的位元組數。

socketFlags
SocketFlags

SocketFlags 值的位元組合。

remoteEP
EndPoint

與成功接收時要更新之遠端主機端點相同類型的 參考 EndPoint

傳回

收到的位元組數目。

例外狀況

buffernull

-或-

remoteEPnull

size 小於 0。

-或-

size 大於 buffer的長度。

socketFlags 不是有效的值組合。

-或-

未設定 LocalEndPoint 屬性。

-或-

在存取 Socket 時發生作業系統錯誤。

呼叫堆疊中的呼叫端沒有所需的使用權限。

範例

下列程式代碼範例會從遠端主機接收無連接數據報。 緩衝區大小, 和 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 會將第一個加入佇列的數據報讀取到局域網路緩衝區中。 如果您收到的資料報大於的大小 bufferReceiveFrom 則 方法會盡可能填滿 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 錯誤碼 檔,以取得錯誤的詳細描述。

注意

AddressFamilyEndPointReceiveFrom所使用的 必須符合 EndPointAddressFamilySendTo所使用的 。

注意

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤

另請參閱

適用於

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

參數

buffer
Byte[]

類型 Byte 的陣列,此為接收資料的儲存位置。

offset
Int32

buffer 參數中的位置,可儲存接收的資料。

size
Int32

要接收的位元組數。

socketFlags
SocketFlags

SocketFlags 值的位元組合。

remoteEP
EndPoint

與成功接收時要更新之遠端主機端點相同類型的 參考 EndPoint

傳回

收到的位元組數目。

例外狀況

buffernull

-或-

remoteEPnull

offset 小於 0。

-或-

offset 大於 buffer 的長度。

-或-

size 小於 0。

-或-

size 大於 buffer 的長度減去位移參數的值。

socketFlags 不是有效的值組合。

-或-

未設定 LocalEndPoint 屬性。

-或-

嘗試存取通訊端時發生錯誤。

範例

下列程式代碼範例會從遠端主機接收無連接數據報。 位移、緩衝區大小和 會 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 會將第一個加入佇列的數據報讀取到局域網路緩衝區中。 如果您收到的資料報大於的大小 bufferReceiveFrom 則 方法會盡可能填滿 buffer 大部分的訊息,並擲回 SocketException。 如果您使用不可靠的通訊協定,將會遺失多餘的數據。 如果您使用可靠的通訊協議,服務提供者將會保留多餘的數據,而且您可以藉由呼叫 ReceiveFrom 具有足夠大緩衝區的 方法來擷取數據。

如果沒有數據可供讀取, ReceiveFrom 方法會封鎖直到數據可用為止。 如果您處於非封鎖模式,且通訊協定堆疊緩衝區中沒有可用的數據,方法 ReceiveFrom 會立即完成並擲回 SocketException。 您可以使用 Available 屬性來判斷資料是否可供讀取。 當 Available 為非零時,請重試接收作業。

雖然 ReceiveFrom 適用於無連線通訊協定,但您也可以使用連線導向通訊協定。 如果您選擇這樣做,您必須先呼叫 Connect 方法來建立遠端主機連線,或藉由呼叫 Accept 方法來接受傳入的遠端主機連線。 如果您在呼叫 ReceiveFrom 方法之前未建立或接受連線,您將會收到 SocketException。 您也可以在呼叫 ReceiveFrom 方法之前,先建立無連線通訊協定的默認遠端主機。

使用連接導向套接字時, ReceiveFrom 將讀取的數據量上限為 參數所 size 指定的位元元組數量。 如果遠端主機關閉 SocketShutdown 方法的連線,且所有可用的數據都已接收,則 ReceiveFrom 方法會立即完成,並傳回零個字節。

注意

呼叫 ReceiveFrom之前,您必須使用 Bind 方法明確地將 系結Socket至本機端點。 如果您未這麼做, ReceiveFrom 將會擲回 SocketException。 如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。

注意

AddressFamilyEndPointReceiveFrom所使用的 必須符合 EndPointAddressFamilySendTo所使用的 。

注意

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤

另請參閱

適用於

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

參數

buffer
Span<Byte>

位元組範圍,這是已接收數據的儲存位置。

socketFlags
SocketFlags

SocketFlags 值的位元組合。

remoteEP
EndPoint

與成功接收時要更新之遠端主機端點相同類型的 參考 EndPoint

傳回

收到的位元組數目。

例外狀況

remoteEPnull

嘗試存取通訊端時發生錯誤。

適用於

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

參數

buffer
Byte[]

Byte 型別的陣列,為收到資料的存放位置。

socketFlags
SocketFlags

SocketFlags 值的位元組合。

remoteEP
EndPoint

與成功接收時要更新之遠端主機端點相同類型的 參考 EndPoint

傳回

收到的位元組數目。

例外狀況

buffernull

-或-

remoteEPnull

嘗試存取通訊端時發生錯誤。

呼叫堆疊中的呼叫端沒有所需的使用權限。

範例

下列程式代碼範例會從遠端主機接收無連接數據報。 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 會將第一個加入佇列的數據報讀取到局域網路緩衝區中。 如果您收到的資料報大於的大小 bufferReceiveFrom 則 方法會盡可能填滿 buffer 大部分的訊息,並擲回 SocketException。 如果您使用不可靠的通訊協定,將會遺失多餘的數據。 如果您使用可靠的通訊協議,服務提供者將會保留多餘的數據,而且您可以藉由呼叫 ReceiveFrom 具有足夠大緩衝區的 方法來擷取數據。

如果沒有數據可供讀取, ReceiveFrom 方法會封鎖直到數據可用為止。 如果您處於非封鎖模式,且通訊協定堆疊緩衝區中沒有可用的數據,方法 ReceiveFrom 會立即完成並擲回 SocketException。 您可以使用 Available 屬性來判斷資料是否可供讀取。 當 Available 為非零時,請重試接收作業。

雖然 ReceiveFrom 適用於無連線通訊協定,但您也可以使用連線導向通訊協定。 如果您選擇這樣做,您必須先呼叫 Connect 方法來建立遠端主機連線,或藉由呼叫 Accept 方法來接受傳入的遠端主機連線。 如果您在呼叫 ReceiveFrom 方法之前未建立或接受連線,您將會收到 SocketException。 您也可以在呼叫 ReceiveFrom 方法之前,先建立無連線通訊協定的默認遠端主機。

使用連接導向套接字時, ReceiveFrom 將會讀取最多可用的數據大小 buffer。 如果遠端主機關閉 SocketShutdown 方法的連線,且所有可用的數據都已接收,則 ReceiveFrom 方法會立即完成,並傳回零個字節。

注意

如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。

注意

AddressFamilyEndPointReceiveFrom所使用的 必須符合 EndPointAddressFamilySendTo所使用的 。

注意

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤

另請參閱

適用於

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

參數

buffer
Span<Byte>

位元組範圍,這是已接收數據的儲存位置。

socketFlags
SocketFlags

SocketFlags 值的位元組合。

receivedAddress
SocketAddress

SocketAddress實例,這個實例會在此方法傳回時,以遠端對等的值進行更新。

傳回

收到的位元組數目。

例外狀況

receivedAddressnull

嘗試存取通訊端時發生錯誤。

適用於

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

參數

buffer
Span<Byte>

位元組範圍,這是已接收數據的儲存位置。

remoteEP
EndPoint

與成功接收時要更新之遠端主機端點相同類型的 參考 EndPoint

傳回

收到的位元組數目。

例外狀況

remoteEPnull

嘗試存取通訊端時發生錯誤。

適用於

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

參數

buffer
Byte[]

類型 Byte 的陣列,此為接收資料的儲存位置。

remoteEP
EndPoint

與成功接收時要更新之遠端主機端點相同類型的 參考 EndPoint

傳回

收到的位元組數目。

例外狀況

buffernull

-或-

remoteEPnull

嘗試存取通訊端時發生錯誤。

呼叫堆疊中的呼叫端沒有所需的使用權限。

範例

下列程式代碼範例會從遠端主機接收無連接數據報。

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 會將第一個加入佇列的數據報讀取到局域網路緩衝區中。 如果您收到的資料報大於的大小 bufferReceiveFrom 則 方法會盡可能填滿 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 錯誤碼 檔,以取得錯誤的詳細描述。

注意

AddressFamilyEndPointReceiveFrom所使用的 必須符合 EndPointAddressFamilySendTo所使用的 。

注意

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤

另請參閱

適用於