Socket.ReceiveFrom Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menerima datagram dan menyimpan titik akhir sumber.
Overload
ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint) |
Menerima jumlah byte yang ditentukan ke dalam buffer data, menggunakan , dan menyimpan titik akhir yang ditentukan SocketFlags. |
ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint) |
Menerima jumlah byte data yang ditentukan ke lokasi buffer data yang ditentukan, menggunakan SocketFlags, dan menyimpan titik akhir. |
ReceiveFrom(Span<Byte>, SocketFlags, EndPoint) |
Menerima datagram ke dalam buffer data, menggunakan , dan menyimpan titik akhir yang ditentukan SocketFlags. |
ReceiveFrom(Byte[], SocketFlags, EndPoint) |
Menerima datagram ke dalam buffer data, menggunakan , dan menyimpan titik akhir yang ditentukan SocketFlags. |
ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress) |
Menerima datagram ke dalam buffer data, menggunakan , dan menyimpan titik akhir yang ditentukan SocketFlags. |
ReceiveFrom(Span<Byte>, EndPoint) |
Menerima datagram ke dalam buffer data dan menyimpan titik akhir. |
ReceiveFrom(Byte[], EndPoint) |
Menerima datagram ke dalam buffer data dan menyimpan titik akhir. |
ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)
- Sumber:
- Socket.cs
- Sumber:
- Socket.cs
- Sumber:
- Socket.cs
Menerima jumlah byte yang ditentukan ke dalam buffer data, menggunakan , dan menyimpan titik akhir yang ditentukan 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
Parameter
- size
- Int32
Jumlah byte yang akan diterima.
- socketFlags
- SocketFlags
Kombinasi bitwise dari SocketFlags nilai.
- remoteEP
- EndPoint
Referensi ke EndPoint jenis yang sama dengan titik akhir host jarak jauh yang akan diperbarui saat berhasil diterima.
Mengembalikan
Jumlah byte yang diterima.
Pengecualian
socketFlags
bukan kombinasi nilai yang valid.
-atau-
Properti LocalEndPoint tidak disetel.
-atau-
Kesalahan sistem operasi terjadi saat mengakses Socket.
Socket Telah ditutup.
Penelepon dalam tumpukan panggilan tidak memiliki izin yang diperlukan.
Contoh
Contoh kode berikut menerima datagram tanpa koneksi dari host jarak jauh. Ukuran buffer, dan SocketFlags diteruskan ke ReceiveFrom metode .
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
Keterangan
Metode membaca ReceiveFrom data ke dalam buffer
parameter, mengembalikan jumlah byte yang berhasil dibaca, dan menangkap titik akhir host jarak jauh tempat data dikirim. Metode ini berguna jika Anda berniat menerima datagram tanpa koneksi dari host yang tidak diketahui atau beberapa host.
Kelebihan beban ini hanya mengharuskan Anda untuk menyediakan buffer penerima, jumlah byte yang ingin Anda terima, yang diperlukan SocketFlags, dan EndPoint yang mewakili host jarak jauh. Offset buffer default ke 0.
Dengan protokol tanpa koneksi, ReceiveFrom akan membaca datagram antrean pertama yang diterima ke dalam buffer jaringan lokal. Jika datagram yang Anda terima lebih besar dari buffer
ukuran , ReceiveFrom metode akan diisi buffer
dengan pesan sebanyak mungkin, dan melempar .SocketException Jika Anda menggunakan protokol yang tidak dapat diandalkan, data berlebih akan hilang. Jika Anda menggunakan protokol yang dapat diandalkan, kelebihan data akan disimpan oleh penyedia layanan dan Anda dapat mengambilnya dengan memanggil ReceiveFrom metode dengan buffer yang cukup besar.
Jika tidak ada data yang tersedia untuk dibaca, ReceiveFrom metode akan memblokir hingga data tersedia. Jika Anda berada dalam mode non-pemblokiran, dan tidak ada data yang tersedia di buffer tumpukan protokol, ReceiveFrom metode akan segera selesai dan melempar SocketException. Anda dapat menggunakan Available properti untuk menentukan apakah data tersedia untuk dibaca. Ketika Available bukan nol, coba lagi operasi terima.
Meskipun ReceiveFrom ditujukan untuk protokol tanpa koneksi, Anda juga dapat menggunakan protokol berorientasi koneksi. Jika Anda memilih untuk melakukannya, Anda harus terlebih dahulu membuat koneksi host jarak jauh dengan memanggil Connect metode atau menerima koneksi host jarak jauh yang masuk dengan memanggil Accept metode . Jika Anda tidak membuat atau menerima koneksi sebelum memanggil ReceiveFrom metode , Anda akan mendapatkan SocketException. Anda juga dapat membuat host jarak jauh default untuk protokol tanpa koneksi sebelum memanggil ReceiveFrom metode .
Dengan soket berorientasi koneksi, ReceiveFrom akan membaca data sebanyak yang tersedia hingga jumlah byte yang ditentukan oleh size
parameter . Jika host jarak jauh mematikan Socket koneksi dengan Shutdown metode , dan semua data yang tersedia telah diterima, ReceiveFrom metode akan segera selesai dan mengembalikan nol byte.
Catatan
Sebelum memanggil ReceiveFrom, Anda harus secara eksplisit mengikat Socket ke titik akhir lokal menggunakan Bind metode . Jika Anda tidak, ReceiveFrom akan melempar SocketException. Jika Anda menerima SocketException, gunakan SocketException.ErrorCode properti untuk mendapatkan kode kesalahan tertentu. Setelah Anda mendapatkan kode ini, lihat dokumentasi kode kesalahan API Windows Sockets versi 2 untuk deskripsi terperinci tentang kesalahan tersebut.
Catatan
Dari yang EndPoint digunakan dalam ReceiveFrom perlu mencocokkan AddressFamily dari yang EndPoint digunakan dalam SendTo.AddressFamily
Catatan
Anggota ini mengeluarkan informasi pelacakan saat Anda mengaktifkan pelacakan jaringan di aplikasi Anda. Untuk informasi selengkapnya, lihat Pelacakan Jaringan di .NET Framework.
Lihat juga
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Berlaku untuk
ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Sumber:
- Socket.cs
- Sumber:
- Socket.cs
- Sumber:
- Socket.cs
Menerima jumlah byte data yang ditentukan ke lokasi buffer data yang ditentukan, menggunakan SocketFlags, dan menyimpan titik akhir.
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
Parameter
- offset
- Int32
Posisi dalam buffer
parameter untuk menyimpan data yang diterima.
- size
- Int32
Jumlah byte yang akan diterima.
- socketFlags
- SocketFlags
Kombinasi bitwise dari SocketFlags nilai.
- remoteEP
- EndPoint
Referensi ke EndPoint jenis yang sama dengan titik akhir host jarak jauh yang akan diperbarui saat berhasil diterima.
Mengembalikan
Jumlah byte yang diterima.
Pengecualian
offset
kurang dari 0.
-atau-
offset
lebih besar dari panjang buffer
.
-atau-
size
kurang dari 0.
-atau-
size
lebih besar dari panjang buffer
dikurangi nilai parameter offset.
socketFlags
bukan kombinasi nilai yang valid.
-atau-
Properti LocalEndPoint tidak disetel.
-atau-
Terjadi kesalahan saat mencoba mengakses soket.
Socket Telah ditutup.
Contoh
Contoh kode berikut menerima datagram tanpa koneksi dari host jarak jauh. Offset, ukuran buffer, dan SocketFlags diteruskan ke ReceiveFrom metode .
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
Keterangan
Metode membaca ReceiveFrom data ke dalam buffer
parameter, mengembalikan jumlah byte yang berhasil dibaca, dan menangkap titik akhir host jarak jauh tempat data dikirim. Metode ini berguna jika Anda berniat menerima datagram tanpa koneksi dari host yang tidak diketahui atau beberapa host.
Dengan protokol tanpa koneksi, ReceiveFrom akan membaca datagram antrean pertama yang diterima ke dalam buffer jaringan lokal. Jika datagram yang Anda terima lebih besar dari buffer
ukuran , ReceiveFrom metode akan diisi buffer
dengan pesan sebanyak mungkin, dan melempar .SocketException Jika Anda menggunakan protokol yang tidak dapat diandalkan, data berlebih akan hilang. Jika Anda menggunakan protokol yang dapat diandalkan, kelebihan data akan disimpan oleh penyedia layanan dan Anda dapat mengambilnya dengan memanggil ReceiveFrom metode dengan buffer yang cukup besar.
Jika tidak ada data yang tersedia untuk dibaca, ReceiveFrom metode akan memblokir hingga data tersedia. Jika Anda berada dalam mode non-pemblokiran, dan tidak ada data yang tersedia di buffer tumpukan protokol, ReceiveFrom metode akan segera selesai dan melempar SocketException. Anda dapat menggunakan Available properti untuk menentukan apakah data tersedia untuk dibaca. Ketika Available bukan nol, coba lagi operasi terima.
Meskipun ReceiveFrom ditujukan untuk protokol tanpa koneksi, Anda juga dapat menggunakan protokol berorientasi koneksi. Jika Anda memilih untuk melakukannya, Anda harus terlebih dahulu membuat koneksi host jarak jauh dengan memanggil Connect metode atau menerima koneksi host jarak jauh yang masuk dengan memanggil Accept metode . Jika Anda tidak membuat atau menerima koneksi sebelum memanggil ReceiveFrom metode , Anda akan mendapatkan SocketException. Anda juga dapat membuat host jarak jauh default untuk protokol tanpa koneksi sebelum memanggil ReceiveFrom metode .
Dengan soket berorientasi koneksi, ReceiveFrom akan membaca data sebanyak yang tersedia hingga jumlah byte yang ditentukan oleh size
parameter . Jika host jarak jauh mematikan Socket koneksi dengan Shutdown metode , dan semua data yang tersedia telah Diterima, ReceiveFrom metode akan segera selesai dan mengembalikan nol byte.
Catatan
Sebelum memanggil ReceiveFrom, Anda harus secara eksplisit mengikat Socket ke titik akhir lokal menggunakan Bind metode . Jika Anda tidak, ReceiveFrom akan melempar SocketException. Jika Anda menerima SocketException, gunakan SocketException.ErrorCode properti untuk mendapatkan kode kesalahan tertentu. Setelah Anda mendapatkan kode ini, lihat dokumentasi kode kesalahan API Windows Sockets versi 2 untuk deskripsi terperinci tentang kesalahan tersebut.
Catatan
Dari yang EndPoint digunakan dalam ReceiveFrom perlu mencocokkan AddressFamily dari yang EndPoint digunakan dalam SendTo.AddressFamily
Catatan
Anggota ini mengeluarkan informasi pelacakan saat Anda mengaktifkan pelacakan jaringan di aplikasi Anda. Untuk informasi selengkapnya, lihat Pelacakan Jaringan di .NET Framework.
Lihat juga
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Berlaku untuk
ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)
- Sumber:
- Socket.cs
- Sumber:
- Socket.cs
- Sumber:
- Socket.cs
Menerima datagram ke dalam buffer data, menggunakan , dan menyimpan titik akhir yang ditentukan 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
Parameter
- socketFlags
- SocketFlags
Kombinasi bitwise dari SocketFlags nilai.
- remoteEP
- EndPoint
Referensi ke EndPoint jenis yang sama dengan titik akhir host jarak jauh yang akan diperbarui saat berhasil diterima.
Mengembalikan
Jumlah byte yang diterima.
Pengecualian
remoteEP
adalah null
.
Terjadi kesalahan saat mencoba mengakses soket.
Socket Telah ditutup.
Berlaku untuk
ReceiveFrom(Byte[], SocketFlags, EndPoint)
- Sumber:
- Socket.cs
- Sumber:
- Socket.cs
- Sumber:
- Socket.cs
Menerima datagram ke dalam buffer data, menggunakan , dan menyimpan titik akhir yang ditentukan 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
Parameter
- socketFlags
- SocketFlags
Kombinasi bitwise dari SocketFlags nilai.
- remoteEP
- EndPoint
Referensi ke EndPoint jenis yang sama dengan titik akhir host jarak jauh yang akan diperbarui saat berhasil diterima.
Mengembalikan
Jumlah byte yang diterima.
Pengecualian
Terjadi kesalahan saat mencoba mengakses soket.
Socket Telah ditutup.
Penelepon dalam tumpukan panggilan tidak memiliki izin yang diperlukan.
Contoh
Contoh kode berikut menerima datagram tanpa koneksi dari host jarak jauh. SocketFlags diteruskan ke ReceiveFrom metode .
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
Keterangan
Metode membaca ReceiveFrom data ke dalam buffer
parameter, mengembalikan jumlah byte yang berhasil dibaca, dan menangkap titik akhir host jarak jauh tempat data dikirim. Metode ini berguna jika Anda berniat menerima datagram tanpa koneksi dari host yang tidak diketahui atau beberapa host.
Kelebihan beban ini hanya mengharuskan Anda untuk menyediakan buffer penerima, yang diperlukan SocketFlags, dan EndPoint yang mewakili host jarak jauh. Offset default ke 0 dan ukuran default ke panjang parameter buffer.
Catatan
Sebelum memanggil ReceiveFrom, Anda harus secara eksplisit mengikat Socket ke titik akhir lokal menggunakan Bind metode . Jika Anda tidak, ReceiveFrom akan melempar SocketException.
Dengan protokol tanpa koneksi, ReceiveFrom akan membaca datagram antrean pertama yang diterima ke dalam buffer jaringan lokal. Jika datagram yang Anda terima lebih besar dari buffer
ukuran , ReceiveFrom metode akan diisi buffer
dengan pesan sebanyak mungkin, dan melempar .SocketException Jika Anda menggunakan protokol yang tidak dapat diandalkan, data berlebih akan hilang. Jika Anda menggunakan protokol yang dapat diandalkan, kelebihan data akan disimpan oleh penyedia layanan dan Anda dapat mengambilnya dengan memanggil ReceiveFrom metode dengan buffer yang cukup besar.
Jika tidak ada data yang tersedia untuk dibaca, ReceiveFrom metode akan memblokir hingga data tersedia. Jika Anda berada dalam mode non-pemblokiran, dan tidak ada data yang tersedia di buffer tumpukan protokol, ReceiveFrom metode akan segera selesai dan melempar SocketException. Anda dapat menggunakan Available properti untuk menentukan apakah data tersedia untuk dibaca. Ketika Available bukan nol, coba lagi operasi terima.
Meskipun ReceiveFrom ditujukan untuk protokol tanpa koneksi, Anda juga dapat menggunakan protokol berorientasi koneksi. Jika Anda memilih untuk melakukannya, Anda harus terlebih dahulu membuat koneksi host jarak jauh dengan memanggil Connect metode atau menerima koneksi host jarak jauh yang masuk dengan memanggil Accept metode . Jika Anda tidak membuat atau menerima koneksi sebelum memanggil ReceiveFrom metode , Anda akan mendapatkan SocketException. Anda juga dapat membuat host jarak jauh default untuk protokol tanpa koneksi sebelum memanggil ReceiveFrom metode .
Dengan soket berorientasi koneksi, ReceiveFrom akan membaca data sebanyak yang tersedia hingga ukuran buffer
. Jika host jarak jauh mematikan Socket koneksi dengan Shutdown metode , dan semua data yang tersedia telah Diterima, ReceiveFrom metode akan segera selesai dan mengembalikan nol byte.
Catatan
Jika Anda menerima SocketException, gunakan SocketException.ErrorCode properti untuk mendapatkan kode kesalahan tertentu. Setelah Anda mendapatkan kode ini, lihat dokumentasi kode kesalahan API Windows Sockets versi 2 untuk deskripsi terperinci tentang kesalahan tersebut.
Catatan
Dari yang EndPoint digunakan dalam ReceiveFrom perlu mencocokkan AddressFamily dari yang EndPoint digunakan dalam SendTo.AddressFamily
Catatan
Anggota ini mengeluarkan informasi pelacakan saat Anda mengaktifkan pelacakan jaringan di aplikasi Anda. Untuk informasi selengkapnya, lihat Pelacakan Jaringan di .NET Framework.
Lihat juga
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Berlaku untuk
ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)
- Sumber:
- Socket.cs
- Sumber:
- Socket.cs
Menerima datagram ke dalam buffer data, menggunakan , dan menyimpan titik akhir yang ditentukan 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
Parameter
- socketFlags
- SocketFlags
Kombinasi bitwise dari SocketFlags nilai.
- receivedAddress
- SocketAddress
SocketAddress Instans yang diperbarui dengan nilai peer jarak jauh saat metode ini kembali.
Mengembalikan
Jumlah byte yang diterima.
Pengecualian
receivedAddress
adalah null
.
Terjadi kesalahan saat mencoba mengakses soket.
Socket Telah ditutup.
Berlaku untuk
ReceiveFrom(Span<Byte>, EndPoint)
- Sumber:
- Socket.cs
- Sumber:
- Socket.cs
- Sumber:
- Socket.cs
Menerima datagram ke dalam buffer data dan menyimpan titik akhir.
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
Parameter
- remoteEP
- EndPoint
Referensi ke EndPoint jenis yang sama dengan titik akhir host jarak jauh yang akan diperbarui saat berhasil diterima.
Mengembalikan
Jumlah byte yang diterima.
Pengecualian
remoteEP
adalah null
.
Terjadi kesalahan saat mencoba mengakses soket.
Socket Telah ditutup.
Berlaku untuk
ReceiveFrom(Byte[], EndPoint)
- Sumber:
- Socket.cs
- Sumber:
- Socket.cs
- Sumber:
- Socket.cs
Menerima datagram ke dalam buffer data dan menyimpan titik akhir.
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
Parameter
- remoteEP
- EndPoint
Referensi ke EndPoint jenis yang sama dengan titik akhir host jarak jauh yang akan diperbarui saat berhasil diterima.
Mengembalikan
Jumlah byte yang diterima.
Pengecualian
Terjadi kesalahan saat mencoba mengakses soket.
Socket Telah ditutup.
Penelepon dalam tumpukan panggilan tidak memiliki izin yang diperlukan.
Contoh
Contoh kode berikut menerima datagram tanpa koneksi dari host jarak jauh.
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
Keterangan
Metode membaca ReceiveFrom data ke dalam buffer
parameter, mengembalikan jumlah byte yang berhasil dibaca, dan menangkap titik akhir host jarak jauh tempat data dikirim. Metode ini berguna jika Anda berniat menerima datagram tanpa koneksi dari host yang tidak diketahui atau beberapa host.
Kelebihan beban ini hanya mengharuskan Anda untuk menyediakan penerima buffer
, dan EndPoint yang mewakili host jarak jauh. Offset buffer default ke 0. Ukuran default ke panjang buffer
parameter dan socketFlags
nilai default ke None.
Catatan
Sebelum memanggil ReceiveFrom, Anda harus secara eksplisit mengikat Socket ke titik akhir lokal menggunakan Bind metode . Jika Anda tidak, ReceiveFrom akan melempar SocketException.
Dengan protokol tanpa koneksi, ReceiveFrom akan membaca datagram antrean pertama yang diterima ke dalam buffer jaringan lokal. Jika datagram yang Anda terima lebih besar dari buffer
ukuran , ReceiveFrom metode akan diisi buffer
dengan pesan sebanyak mungkin, dan melempar .SocketException Jika Anda menggunakan protokol yang tidak dapat diandalkan, data berlebih akan hilang. Jika Anda menggunakan protokol yang dapat diandalkan, kelebihan data akan disimpan oleh penyedia layanan dan Anda dapat mengambilnya dengan memanggil ReceiveFrom metode dengan buffer yang cukup besar.
Jika tidak ada data yang tersedia untuk dibaca, ReceiveFrom metode akan memblokir hingga data tersedia. Jika Anda berada dalam mode non-pemblokiran, dan tidak ada data yang tersedia di buffer tumpukan protokol, ReceiveFrom metode akan segera selesai dan melempar SocketException. Anda dapat menggunakan Available properti untuk menentukan apakah data tersedia untuk dibaca. Ketika Available bukan nol, coba lagi operasi terima.
Meskipun ReceiveFrom ditujukan untuk protokol tanpa koneksi, Anda juga dapat menggunakan protokol berorientasi koneksi. Jika Anda memilih untuk melakukannya, Anda harus terlebih dahulu membuat koneksi host jarak jauh dengan memanggil Connect metode atau menerima koneksi host jarak jauh yang masuk dengan memanggil Accept metode . Jika Anda tidak membuat atau menerima koneksi sebelum memanggil ReceiveFrom metode , Anda akan mendapatkan SocketException. Anda juga dapat membuat host jarak jauh default untuk protokol tanpa koneksi sebelum memanggil ReceiveFrom metode .
Dengan soket berorientasi koneksi, ReceiveFrom akan membaca data sebanyak yang tersedia hingga ukuran buffer
. Jika host jarak jauh mematikan Socket koneksi dengan Shutdown metode , dan semua data yang tersedia telah diterima, ReceiveFrom metode akan segera selesai dan mengembalikan nol byte.
Catatan
Jika Anda menerima SocketException, gunakan SocketException.ErrorCode properti untuk mendapatkan kode kesalahan tertentu. Setelah Anda mendapatkan kode ini, lihat dokumentasi kode kesalahan API Windows Sockets versi 2 untuk deskripsi terperinci tentang kesalahan tersebut.
Catatan
Dari yang EndPoint digunakan dalam ReceiveFrom perlu mencocokkan AddressFamily dari yang EndPoint digunakan dalam SendTo.AddressFamily
Catatan
Anggota ini mengeluarkan informasi pelacakan saat Anda mengaktifkan pelacakan jaringan di aplikasi Anda. Untuk informasi selengkapnya, lihat Pelacakan Jaringan di .NET Framework.