Socket.SendTo Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wysyła dane do określonego punktu końcowego.
Przeciążenia
SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint) |
Wysyła określoną liczbę bajtów danych do określonego punktu końcowego, począwszy od określonej lokalizacji w buforze i przy użyciu określonego SocketFlags. |
SendTo(Byte[], Int32, SocketFlags, EndPoint) |
Wysyła określoną liczbę bajtów danych do określonego punktu końcowego przy użyciu określonego SocketFlagselementu . |
SendTo(ReadOnlySpan<Byte>, SocketFlags, SocketAddress) |
Wysyła dane do określonego punktu końcowego przy użyciu określonego SocketFlagselementu . |
SendTo(ReadOnlySpan<Byte>, EndPoint) |
Wysyła dane do określonego punktu końcowego. |
SendTo(Byte[], SocketFlags, EndPoint) |
Wysyła dane do określonego punktu końcowego przy użyciu określonego SocketFlagselementu . |
SendTo(Byte[], EndPoint) |
Wysyła dane do określonego punktu końcowego. |
SendTo(ReadOnlySpan<Byte>, SocketFlags, EndPoint) |
Wysyła dane do określonego punktu końcowego przy użyciu określonego SocketFlagselementu . |
SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła określoną liczbę bajtów danych do określonego punktu końcowego, począwszy od określonej lokalizacji w buforze i przy użyciu określonego SocketFlags.
public:
int SendTo(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP);
public int SendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP);
member this.SendTo : byte[] * int * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint -> int
Public Function SendTo (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, remoteEP As EndPoint) As Integer
Parametry
- offset
- Int32
Pozycja w buforze danych, w którym należy rozpocząć wysyłanie danych.
- size
- Int32
Liczba bajtów do wysłania.
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości.
Zwraca
Liczba wysłanych bajtów.
Wyjątki
offset
wartość jest mniejsza niż 0.
-lub-
offset
jest większa niż długość .buffer
-lub-
size
wartość jest mniejsza niż 0.
-lub-
size
jest większa niż długość buffer
odmętą wartości parametru offset
.
socketFlags
nie jest prawidłową kombinacją wartości.
-lub-
Podczas uzyskiwania dostępu do elementu Socketwystępuje błąd systemu operacyjnego.
Element Socket został zamknięty.
Obiekt wywołujący w stosie wywołań nie ma wymaganych uprawnień.
Przykłady
Poniższy przykład kodu wysyła datagram bez połączenia do określonego hosta zdalnego. Przesunięcie, rozmiar i SocketFlags są przekazywane do SendTo metody .
static void SendTo4()
{
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 );
array<Byte>^ msg = Encoding::ASCII->GetBytes( "This is a test" );
Console::WriteLine( "Sending data." );
// This call blocks.
s->SendTo( msg, 0, msg->Length, SocketFlags::None, endPoint );
s->Close();
}
public static void SendTo4()
{
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);
byte[] msg = Encoding.ASCII.GetBytes("This is a test");
Console.WriteLine("Sending data.");
// This call blocks.
s.SendTo(msg, 0, msg.Length, SocketFlags.None, endPoint);
s.Close();
}
Public Shared Sub SendTo4()
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)
Dim msg As Byte() = Encoding.ASCII.GetBytes("This is a test")
Console.WriteLine("Sending data.")
' This call blocks.
s.SendTo(msg, 0, msg.Length, SocketFlags.None, endPoint)
s.Close()
End Sub
Uwagi
W tym przeciążeniu, jeśli określisz flagę DontRoute jako socketflags
parametr, wysyłane dane nie będą kierowane.
Jeśli używasz protokołu bez połączenia, nie musisz ustanawiać domyślnego hosta zdalnego przy Connect użyciu metody przed wywołaniem metody SendTo. Należy to zrobić tylko wtedy, gdy zamierzasz wywołać metodę Send . Jeśli wywołasz metodę Connect przed wywołaniem SendTometody , remoteEP
parametr zastąpi określony domyślny host zdalny tylko dla tej operacji wysyłania. Nie jest również wymagane wywołanie Bind metody, ponieważ podstawowy dostawca usług przypisze najbardziej odpowiedni lokalny adres sieciowy i numer portu. Jeśli musisz zidentyfikować przypisany adres sieci lokalnej i numer portu, możesz użyć LocalEndPoint właściwości po pomyślnym zakończeniu SendTo metody.
Chociaż jest przeznaczony dla protokołów bez połączenia, SendTo działa również z protokołami zorientowanymi na połączenie. Jeśli używasz protokołu zorientowanego na połączenie, musisz najpierw ustanowić połączenie hosta zdalnego przez wywołanie Connect metody lub zaakceptować przychodzące żądanie połączenia przy użyciu Accept metody . Jeśli nie ustanowisz lub nie zaakceptujesz połączenia hosta zdalnego, SendTo zgłosi błąd SocketException. Możesz również ustanowić domyślnego hosta zdalnego dla protokołu bez połączenia przed wywołaniem SendTo metody . W jednym z tych przypadków SendTo zignoruje remoteEP
parametr i wyśle tylko dane do połączonego lub domyślnego hosta zdalnego.
Blokujące gniazda będą blokowane do momentu wysłania żądanej liczby bajtów. Ponieważ nieblokowanie Socket jest wykonywane natychmiast, może nie wysyłać wszystkich bajtów żądanych w ramach jednej operacji. Aplikacja jest odpowiedzialna za śledzenie liczby wysłanych bajtów i ponawianie próby wykonania operacji do momentu wysłania żądanej liczby bajtów przez aplikację. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie SendTo metody oznacza, że podstawowy system miał miejsce do buforowania danych dla wysyłania sieciowego.
Jeśli używasz protokołu bez połączenia w trybie blokowania, SendTo będzie blokowany do momentu wysłania datagramu. Jeśli chcesz wysłać dane do adresu emisji, musisz najpierw wywołać metodę SetSocketOption i ustawić opcję gniazda na SocketOptionName.Broadcast. Należy również mieć pewność, że rozmiar nie przekracza maksymalnego rozmiaru pakietu bazowego dostawcy usług. Jeśli tak się stanie, datagram nie zostanie wysłany i SendTo zgłosi błąd SocketException.
Uwaga
Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2 , aby uzyskać szczegółowy opis błędu.
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.
Zobacz też
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
Dotyczy
SendTo(Byte[], Int32, SocketFlags, EndPoint)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła określoną liczbę bajtów danych do określonego punktu końcowego przy użyciu określonego SocketFlagselementu .
public:
int SendTo(cli::array <System::Byte> ^ buffer, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP);
public int SendTo (byte[] buffer, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP);
member this.SendTo : byte[] * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint -> int
Public Function SendTo (buffer As Byte(), size As Integer, socketFlags As SocketFlags, remoteEP As EndPoint) As Integer
Parametry
- size
- Int32
Liczba bajtów do wysłania.
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości.
Zwraca
Liczba wysłanych bajtów.
Wyjątki
Określony size
parametr przekracza rozmiar buffer
.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Przykłady
Poniższy przykład kodu wysyła datagram bez połączenia do określonego hosta zdalnego. Rozmiar i SocketFlags są przekazywane do SendTo metody .
static void SendTo3()
{
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 );
array<Byte>^ msg = Encoding::ASCII->GetBytes( "This is a test" );
Console::WriteLine( "Sending data." );
// This call blocks.
s->SendTo( msg, msg->Length, SocketFlags::None, endPoint );
s->Close();
}
public static void SendTo3()
{
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);
byte[] msg = Encoding.ASCII.GetBytes("This is a test");
Console.WriteLine("Sending data.");
// This call blocks.
s.SendTo(msg, msg.Length, SocketFlags.None, endPoint);
s.Close();
}
Public Shared Sub SendTo3()
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)
Dim msg As Byte() = Encoding.ASCII.GetBytes("This is a test")
Console.WriteLine("Sending data.")
' This call blocks.
s.SendTo(msg, msg.Length, SocketFlags.None, endPoint)
s.Close()
End Sub
Uwagi
W tym przeciążeniu wartość domyślna przesunięcia buforu to 0. Jeśli określisz flagę DontRoute jako socketflags
parametr, wysyłane dane nie będą kierowane.
Jeśli używasz protokołu bez połączenia, nie musisz ustanawiać domyślnego hosta zdalnego przy Connect użyciu metody przed wywołaniem metody SendTo. Należy to zrobić tylko wtedy, gdy zamierzasz wywołać metodę Send . Jeśli wywołasz metodę Connect przed wywołaniem SendTometody , remoteEP
parametr zastąpi określony domyślny host zdalny tylko dla tej operacji wysyłania. Nie jest również wymagane wywołanie Bind metody, ponieważ podstawowy dostawca usług przypisze najbardziej odpowiedni lokalny adres sieciowy i numer portu. Jeśli musisz zidentyfikować przypisany adres sieci lokalnej i numer portu, możesz użyć LocalEndPoint właściwości po pomyślnym zakończeniu SendTo metody.
Chociaż jest przeznaczony dla protokołów bez połączenia, SendTo działa również z protokołami zorientowanymi na połączenie. Jeśli używasz protokołu zorientowanego na połączenie, musisz najpierw ustanowić połączenie hosta zdalnego przez wywołanie Connect metody lub zaakceptować przychodzące żądanie połączenia przy użyciu Accept metody . Jeśli nie ustanowisz lub nie zaakceptujesz połączenia hosta zdalnego, SendTo zgłosi błąd SocketException. Możesz również ustanowić domyślnego hosta zdalnego dla protokołu bez połączenia przed wywołaniem SendTo metody . W jednym z tych przypadków SendTo zignoruje remoteEP
parametr i wyśle tylko dane do połączonego lub domyślnego hosta zdalnego.
Blokujące gniazda będą blokowane do momentu wysłania żądanej liczby bajtów. Ponieważ odblokowanie Socket zostanie ukończone natychmiast, może nie wysłać wszystkich bajtów żądanych w ramach jednej operacji. Aplikacja jest odpowiedzialna za śledzenie liczby wysłanych bajtów i ponawianie próby wykonania operacji do momentu wysłania żądanej liczby bajtów przez aplikację. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie SendTo metody oznacza, że podstawowy system miał miejsce do buforowania danych dla wysyłania sieciowego.
Jeśli używasz protokołu bez połączenia w trybie blokowania, SendTo będzie blokowany do momentu wysłania datagramu. Jeśli chcesz wysłać dane do adresu emisji, musisz najpierw wywołać metodę SetSocketOption i ustawić opcję gniazda na SocketOptionName.Broadcast. Należy również upewnić się, że liczba wysłanych bajtów nie przekracza maksymalnego rozmiaru pakietu bazowego dostawcy usług. Jeśli tak się stanie, datagram nie zostanie wysłany i SendTo zgłosi błąd SocketException.
Uwaga
Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2 , aby uzyskać szczegółowy opis błędu.
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.
Zobacz też
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
Dotyczy
SendTo(ReadOnlySpan<Byte>, SocketFlags, SocketAddress)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła dane do określonego punktu końcowego przy użyciu określonego SocketFlagselementu .
public:
int SendTo(ReadOnlySpan<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::SocketAddress ^ socketAddress);
public int SendTo (ReadOnlySpan<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.SocketAddress socketAddress);
member this.SendTo : ReadOnlySpan<byte> * System.Net.Sockets.SocketFlags * System.Net.SocketAddress -> int
Public Function SendTo (buffer As ReadOnlySpan(Of Byte), socketFlags As SocketFlags, socketAddress As SocketAddress) As Integer
Parametry
- buffer
- ReadOnlySpan<Byte>
Zakres bajtów, który zawiera dane do wysłania.
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości, które będą używane podczas wysyłania danych.
- socketAddress
- SocketAddress
Obiekt SocketAddress reprezentujący miejsce docelowe danych.
Zwraca
Liczba wysłanych bajtów.
Wyjątki
socketAddress
to null
.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Dotyczy
SendTo(ReadOnlySpan<Byte>, EndPoint)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła dane do określonego punktu końcowego.
public:
int SendTo(ReadOnlySpan<System::Byte> buffer, System::Net::EndPoint ^ remoteEP);
public int SendTo (ReadOnlySpan<byte> buffer, System.Net.EndPoint remoteEP);
member this.SendTo : ReadOnlySpan<byte> * System.Net.EndPoint -> int
Public Function SendTo (buffer As ReadOnlySpan(Of Byte), remoteEP As EndPoint) As Integer
Parametry
- buffer
- ReadOnlySpan<Byte>
Zakres bajtów, który zawiera dane do wysłania.
Zwraca
Liczba wysłanych bajtów.
Wyjątki
remoteEP
to null
.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Dotyczy
SendTo(Byte[], SocketFlags, EndPoint)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła dane do określonego punktu końcowego przy użyciu określonego SocketFlagselementu .
public:
int SendTo(cli::array <System::Byte> ^ buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP);
public int SendTo (byte[] buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP);
member this.SendTo : byte[] * System.Net.Sockets.SocketFlags * System.Net.EndPoint -> int
Public Function SendTo (buffer As Byte(), socketFlags As SocketFlags, remoteEP As EndPoint) As Integer
Parametry
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości.
Zwraca
Liczba wysłanych bajtów.
Wyjątki
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Przykłady
Poniższy przykład kodu wysyła datagram bez połączenia do określonego hosta zdalnego. SocketFlags są przekazywane do SendTo metody .
static void SendTo2()
{
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 );
array<Byte>^ msg = Encoding::ASCII->GetBytes( "This is a test" );
Console::WriteLine( "Sending data." );
// This call blocks.
s->SendTo( msg, SocketFlags::None, endPoint );
s->Close();
}
public static void SendTo2()
{
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);
byte[] msg = Encoding.ASCII.GetBytes("This is a test");
Console.WriteLine("Sending data.");
// This call blocks.
s.SendTo(msg, SocketFlags.None, endPoint);
s.Close();
}
Public Shared Sub SendTo2()
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)
Dim msg As Byte() = Encoding.ASCII.GetBytes("This is a test")
Console.WriteLine("Sending data.")
' This call blocks.
s.SendTo(msg, SocketFlags.None, endPoint)
s.Close()
End Sub
Uwagi
W tym przeciążeniu przesunięcie buforu domyślnie wynosi 0, a liczba bajtów do wysłania wartości domyślnych do rozmiaru buffer
. Jeśli określisz flagę DontRoute jako socketflags
parametr, wysyłane dane nie będą kierowane.
Jeśli używasz protokołu bez połączenia, nie musisz ustanawiać domyślnego hosta zdalnego przy Connect użyciu metody przed wywołaniem metody SendTo. Należy to zrobić tylko wtedy, gdy zamierzasz wywołać metodę Send . Jeśli wywołasz metodę Connect przed wywołaniem SendTometody , remoteEP
parametr zastąpi określony domyślny host zdalny tylko dla tej operacji wysyłania. Nie jest również wymagane wywołanie Bind metody, ponieważ podstawowy dostawca usług przypisze najbardziej odpowiedni lokalny adres sieciowy i numer portu. Jeśli musisz zidentyfikować przypisany adres sieci lokalnej i numer portu, możesz użyć LocalEndPoint właściwości po pomyślnym zakończeniu SendTo metody.
Chociaż jest przeznaczony dla protokołów bez połączenia, SendTo działa również z protokołami zorientowanymi na połączenie. Jeśli używasz protokołu zorientowanego na połączenie, musisz najpierw ustanowić połączenie hosta zdalnego przez wywołanie Connect metody lub zaakceptować przychodzące żądanie połączenia przy użyciu Accept metody . Jeśli nie ustanowisz lub nie zaakceptujesz połączenia hosta zdalnego, SendTo zgłosi błąd SocketException. Możesz również ustanowić domyślnego hosta zdalnego dla protokołu bez połączenia przed wywołaniem SendTo metody . W jednym z tych przypadków SendTo zignoruje remoteEP
parametr i wyśle tylko dane do połączonego lub domyślnego hosta zdalnego.
Blokujące gniazda będą blokowane do momentu wysłania żądanych wszystkich bajtów w obiekcie buffer
. Ponieważ odblokowanie Socket zostanie ukończone natychmiast, może nie wysłać wszystkich bajtów w obiekcie buffer
. Aplikacja jest odpowiedzialna za śledzenie liczby wysłanych bajtów i ponowienie próby wykonania operacji, dopóki aplikacja nie wyśle wszystkich bajtów w obiekcie buffer
. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie SendTo metody oznacza, że podstawowy system miał miejsce do buforowania danych dla wysyłania sieciowego.
Jeśli używasz protokołu bez połączenia w trybie blokowania, SendTo będzie blokowany do momentu wysłania datagramu. Jeśli chcesz wysłać dane do adresu emisji, musisz najpierw wywołać metodę SetSocketOption i ustawić opcję gniazda na SocketOptionName.Broadcast. Należy również upewnić się, że liczba wysłanych bajtów nie przekracza maksymalnego rozmiaru pakietu bazowego dostawcy usług. Jeśli tak się stanie, datagram nie zostanie wysłany i SendTo zgłosi błąd SocketException.
Uwaga
Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2 , aby uzyskać szczegółowy opis błędu.
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.
Zobacz też
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
Dotyczy
SendTo(Byte[], EndPoint)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła dane do określonego punktu końcowego.
public:
int SendTo(cli::array <System::Byte> ^ buffer, System::Net::EndPoint ^ remoteEP);
public int SendTo (byte[] buffer, System.Net.EndPoint remoteEP);
member this.SendTo : byte[] * System.Net.EndPoint -> int
Public Function SendTo (buffer As Byte(), remoteEP As EndPoint) As Integer
Parametry
Zwraca
Liczba wysłanych bajtów.
Wyjątki
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Przykłady
Poniższy przykład kodu wysyła datagram bez połączenia do określonego hosta zdalnego.
static void SendTo1()
{
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 );
array<Byte>^ msg = Encoding::ASCII->GetBytes( "This is a test" );
Console::WriteLine( "Sending data." );
// This call blocks.
s->SendTo( msg, endPoint );
s->Close();
}
public static void SendTo1()
{
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);
byte[] msg = Encoding.ASCII.GetBytes("This is a test");
Console.WriteLine("Sending data.");
// This call blocks.
s.SendTo(msg, endPoint);
s.Close();
}
Public Shared Sub SendTo1()
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)
Dim msg As Byte() = Encoding.ASCII.GetBytes("This is a test")
Console.WriteLine("Sending data.")
' This call blocks.
s.SendTo(msg, endPoint)
s.Close()
End Sub
Uwagi
W tym przeciążeniu przesunięcie buforu domyślnie wynosi 0, liczba bajtów do wysłania wartości domyślnych do rozmiaru parametru buffer
, a SocketFlags wartość domyślna to 0.
Jeśli używasz protokołu bez połączenia, nie musisz ustanawiać domyślnego hosta zdalnego przy Connect użyciu metody przed wywołaniem metody SendTo. Należy to zrobić tylko wtedy, gdy zamierzasz wywołać metodę Send . Jeśli wywołasz metodę Connect przed wywołaniem SendTometody , remoteEP
parametr zastąpi określony domyślny host zdalny tylko dla tej operacji wysyłania. Nie jest również wymagane wywołanie Bind metody, ponieważ podstawowy dostawca usług przypisze najbardziej odpowiedni lokalny adres sieciowy i numer portu. Jeśli musisz zidentyfikować przypisany adres sieci lokalnej i numer portu, możesz użyć LocalEndPoint właściwości po pomyślnym zakończeniu SendTo metody.
Chociaż jest przeznaczony dla protokołów bez połączenia, SendTo działa również z protokołami zorientowanymi na połączenie. Jeśli używasz protokołu zorientowanego na połączenie, musisz najpierw ustanowić połączenie hosta zdalnego przez wywołanie Connect metody lub zaakceptować przychodzące żądanie połączenia przy użyciu Accept metody . Jeśli nie ustanowisz lub nie zaakceptujesz połączenia hosta zdalnego, SendTo zgłosi błąd SocketException. Możesz również ustanowić domyślnego hosta zdalnego dla protokołu bez połączenia przed wywołaniem SendTo metody . W jednym z tych przypadków SendTo zignoruje remoteEP
parametr i wyśle tylko dane do połączonego lub domyślnego hosta zdalnego.
Blokujące gniazda będą blokowane do momentu wysłania wszystkich bajtów w buforze. Ponieważ odblokowanie Socket zostanie ukończone natychmiast, może nie wysłać wszystkich bajtów w obiekcie buffer
. Aplikacja jest odpowiedzialna za śledzenie liczby wysłanych bajtów i ponowienie próby wykonania operacji, dopóki aplikacja nie wyśle wszystkich bajtów w obiekcie buffer
. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości wychodzących danych. Pomyślne ukończenie SendTo metody oznacza, że podstawowy system miał miejsce do buforowania danych dla wysyłania sieciowego.
Jeśli używasz protokołu bez połączenia w trybie blokowania, SendTo będzie blokowany do momentu wysłania datagramu. Jeśli chcesz wysłać dane do adresu emisji, musisz najpierw wywołać metodę SetSocketOption i ustawić opcję gniazda na SocketOptionName.Broadcast. Należy również upewnić się, że liczba wysłanych bajtów nie przekracza maksymalnego rozmiaru pakietu bazowego dostawcy usług. Jeśli tak się stanie, datagram nie zostanie wysłany i SendTo zgłosi błąd SocketException.
Uwaga
Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2 , aby uzyskać szczegółowy opis błędu.
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.
Zobacz też
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
Dotyczy
SendTo(ReadOnlySpan<Byte>, SocketFlags, EndPoint)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła dane do określonego punktu końcowego przy użyciu określonego SocketFlagselementu .
public:
int SendTo(ReadOnlySpan<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP);
public int SendTo (ReadOnlySpan<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP);
member this.SendTo : ReadOnlySpan<byte> * System.Net.Sockets.SocketFlags * System.Net.EndPoint -> int
Public Function SendTo (buffer As ReadOnlySpan(Of Byte), socketFlags As SocketFlags, remoteEP As EndPoint) As Integer
Parametry
- buffer
- ReadOnlySpan<Byte>
Zakres bajtów, który zawiera dane do wysłania.
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości.
Zwraca
Liczba wysłanych bajtów.
Wyjątki
remoteEP
to null
.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.