Socket.SendTo Metoda

Definicja

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

buffer
Byte[]

Tablica typu Byte , która zawiera dane do wysłania.

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.

remoteEP
EndPoint

Obiekt EndPoint reprezentujący lokalizację docelową danych.

Zwraca

Liczba wysłanych bajtów.

Wyjątki

buffer to null.

-lub-

remoteEP to null.

offset wartość jest mniejsza niż 0.

-lub-

offsetjest 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ż

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

buffer
Byte[]

Tablica typu Byte , która zawiera dane do wysłania.

size
Int32

Liczba bajtów do wysłania.

socketFlags
SocketFlags

Bitowa kombinacja SocketFlags wartości.

remoteEP
EndPoint

Obiekt EndPoint reprezentujący lokalizację docelową danych.

Zwraca

Liczba wysłanych bajtów.

Wyjątki

buffer to null.

-lub-

remoteEP to null.

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ż

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.

remoteEP
EndPoint

Obiekt EndPoint reprezentujący miejsce docelowe danych.

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

buffer
Byte[]

Tablica typu Byte , która zawiera dane do wysłania.

socketFlags
SocketFlags

Bitowa kombinacja SocketFlags wartości.

remoteEP
EndPoint

Obiekt EndPoint reprezentujący lokalizację docelową danych.

Zwraca

Liczba wysłanych bajtów.

Wyjątki

buffer to null.

-lub-

remoteEP to null.

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ż

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

buffer
Byte[]

Tablica typu Byte , która zawiera dane do wysłania.

remoteEP
EndPoint

Obiekt EndPoint reprezentujący miejsce docelowe danych.

Zwraca

Liczba wysłanych bajtów.

Wyjątki

buffer to null.

-lub-

remoteEP to null.

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ż

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.

remoteEP
EndPoint

Obiekt EndPoint reprezentujący miejsce docelowe danych.

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