Socket.SendTo Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Odesílá data do konkrétního koncového bodu.
Přetížení
SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint) |
Odešle zadaný počet bajtů dat do zadaného koncového bodu počínaje zadaným umístěním ve vyrovnávací paměti a pomocí zadaného SocketFlags. |
SendTo(Byte[], Int32, SocketFlags, EndPoint) |
Odešle zadaný počet bajtů dat do zadaného koncového bodu pomocí .SocketFlags |
SendTo(ReadOnlySpan<Byte>, SocketFlags, SocketAddress) |
Odešle data do konkrétního koncového bodu pomocí zadaného SocketFlagsparametru . |
SendTo(ReadOnlySpan<Byte>, EndPoint) |
Odešle data do zadaného koncového bodu. |
SendTo(Byte[], SocketFlags, EndPoint) |
Odešle data do konkrétního koncového bodu pomocí zadaného SocketFlagsparametru . |
SendTo(Byte[], EndPoint) |
Odešle data do zadaného koncového bodu. |
SendTo(ReadOnlySpan<Byte>, SocketFlags, EndPoint) |
Odešle data do konkrétního koncového bodu pomocí zadaného SocketFlagsparametru . |
SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle zadaný počet bajtů dat do zadaného koncového bodu počínaje zadaným umístěním ve vyrovnávací paměti a pomocí zadaného 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
Pozice ve vyrovnávací paměti dat, ve které chcete začít odesílat data.
- size
- Int32
Počet bajtů k odeslání.
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
Návraty
Počet odeslaných bajtů
Výjimky
offset
je menší než 0.
-nebo-
offset
je větší než délka .buffer
-nebo-
size
je menší než 0.
-nebo-
size
je větší než délka parametru buffer
minus hodnota parametru offset
.
socketFlags
není platná kombinace hodnot.
-nebo-
Při přístupu k dojde k chybě operačního Socketsystému .
Byla Socket uzavřena.
Volající v zásobníku volání nemá požadovaná oprávnění.
Příklady
Následující příklad kódu odešle datagram bez připojení na zadaného vzdáleného hostitele. Posun, velikost a SocketFlags jsou předány SendTo metodě .
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
Poznámky
Pokud v tomto přetížení zadáte DontRoute příznak jako socketflags
parametr, nebudou odesílaná data směrována.
Pokud používáte protokol bez připojení, před voláním SendTometody není nutné vytvořit výchozího vzdáleného Connect hostitele pomocí metody . Stačí to provést pouze v případě, že máte v úmyslu volat metodu Send . Pokud zavoláte metodu Connect před voláním SendTometody , remoteEP
parametr přepíše zadaného výchozího vzdáleného hostitele pouze pro danou operaci odeslání. Také nemusíte volat metodu Bind , protože poskytovatel služeb přiřadí nejvhodnější místní síťovou adresu a číslo portu. Pokud potřebujete identifikovat přiřazenou adresu místní sítě a číslo portu, můžete po SendTo úspěšném dokončení metody použít LocalEndPoint vlastnost .
I když jsou určené pro protokoly bez připojení, SendTo funguje také s protokoly orientovanými na připojení. Pokud používáte protokol orientovaný na připojení, musíte nejprve vytvořit připojení vzdáleného hostitele voláním Connect metody nebo přijmout příchozí požadavek na připojení pomocí Accept metody . Pokud nenavážete nebo nepřijmete připojení ke vzdálenému hostiteli, SendTo vyvolá se SocketException. Před voláním metody můžete také vytvořit výchozího vzdáleného SendTo hostitele pro protokol bez připojení. V obou těchto případech SendTo bude parametr ignorovat remoteEP
a odesílat data pouze připojenému nebo výchozímu vzdálenému hostiteli.
Blokující sokety budou blokovány, dokud nebude odeslán požadovaný počet bajtů. Vzhledem k tomu, že se neblokující Socket operace dokončí okamžitě, nemusí odeslat všechny požadované bajty v rámci jedné operace. Vaše aplikace zodpovídá za sledování počtu odeslaných bajtů a opakování operace, dokud aplikace neodešle požadovaný počet bajtů. Není také zaručeno, že se odesílaná data objeví v síti okamžitě. Aby se zvýšila efektivita sítě, může základní systém zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení SendTo metody znamená, že podkladový systém měl prostor pro ukládání dat do vyrovnávací paměti pro síťové odesílání.
Pokud používáte protokol bez připojení v režimu blokování, SendTo bude nástroj blokovat, dokud se datagram nepošle. Pokud chcete odesílat data na adresu všesměrového vysílání, musíte nejprve zavolat metodu SetSocketOption a nastavit možnost soketu na SocketOptionName.Broadcast. Musíte také zajistit, aby velikost nepřekračovala maximální velikost paketů příslušného poskytovatele služeb. Pokud ano, datagram se neodesílají a SendTo vyvolá .SocketException
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API rozhraní Windows Sockets verze 2 .
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Viz také
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
Platí pro
SendTo(Byte[], Int32, SocketFlags, EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle zadaný počet bajtů dat do zadaného koncového bodu pomocí zadaného SocketFlags.
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
Počet bajtů k odeslání.
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
Návraty
Počet odeslaných bajtů.
Výjimky
Zadaná size
hodnota překračuje velikost buffer
.
Při pokusu o přístup k soketu došlo k chybě.
Byla Socket uzavřena.
Příklady
Následující příklad kódu odešle datagram bez připojení na zadaného vzdáleného hostitele. Velikost a SocketFlags jsou předány SendTo metodě .
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
Poznámky
Při tomto přetížení je posun vyrovnávací paměti ve výchozím nastavení 0. Pokud jako socketflags
parametr zadáte DontRoute příznak, nebudou odesílaná data směrována.
Pokud používáte protokol bez připojení, před voláním SendTometody není nutné vytvořit výchozího vzdáleného Connect hostitele pomocí metody . Stačí to provést pouze v případě, že máte v úmyslu volat metodu Send . Pokud zavoláte metodu Connect před voláním SendTometody , remoteEP
parametr přepíše zadaného výchozího vzdáleného hostitele pouze pro danou operaci odeslání. Také nemusíte volat metodu Bind , protože poskytovatel služeb přiřadí nejvhodnější místní síťovou adresu a číslo portu. Pokud potřebujete identifikovat přiřazenou adresu místní sítě a číslo portu, můžete po SendTo úspěšném dokončení metody použít LocalEndPoint vlastnost .
I když jsou určené pro protokoly bez připojení, SendTo funguje také s protokoly orientovanými na připojení. Pokud používáte protokol orientovaný na připojení, musíte nejprve vytvořit připojení vzdáleného hostitele voláním Connect metody nebo přijmout příchozí požadavek na připojení pomocí Accept metody . Pokud nenavážete nebo nepřijmete připojení ke vzdálenému hostiteli, SendTo vyvolá se SocketException. Před voláním metody můžete také vytvořit výchozího vzdáleného SendTo hostitele pro protokol bez připojení. V obou těchto případech SendTo bude parametr ignorovat remoteEP
a odesílat data pouze připojenému nebo výchozímu vzdálenému hostiteli.
Blokující sokety budou blokovány, dokud nebude odeslán požadovaný počet bajtů. Vzhledem k tomu, že se odblokování Socket dokončí okamžitě, nemusí odeslat všechny požadované bajty v rámci jedné operace. Je zodpovědností vaší aplikace sledovat počet odeslaných bajtů a opakovat operaci, dokud aplikace neodešle požadovaný počet bajtů. Není také zaručeno, že se odesílaná data objeví v síti okamžitě. Aby se zvýšila efektivita sítě, může základní systém zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení SendTo metody znamená, že podkladový systém měl prostor pro ukládání dat do vyrovnávací paměti pro síťové odesílání.
Pokud používáte protokol bez připojení v režimu blokování, SendTo bude nástroj blokovat, dokud se datagram nepošle. Pokud chcete odesílat data na adresu všesměrového vysílání, musíte nejprve zavolat metodu SetSocketOption a nastavit možnost soketu na SocketOptionName.Broadcast. Musíte se také ujistit, že počet odeslaných bajtů nepřekračuje maximální velikost paketů příslušného poskytovatele služeb. Pokud ano, datagram se neodesílají a SendTo vyvolá SocketException.
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API windows Sockets verze 2 .
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Viz také
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
Platí pro
SendTo(ReadOnlySpan<Byte>, SocketFlags, SocketAddress)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle data do konkrétního koncového bodu pomocí zadaného SocketFlags.
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>
Rozsah bajtů, který obsahuje data, která se mají odeslat.
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot, které se použijí při odesílání dat.
- socketAddress
- SocketAddress
Hodnota SocketAddress , která představuje cíl dat.
Návraty
Počet odeslaných bajtů.
Výjimky
socketAddress
je null
.
Při pokusu o přístup k soketu došlo k chybě.
Byl Socket zavřený.
Platí pro
SendTo(ReadOnlySpan<Byte>, EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odesílá data do zadaného koncového bodu.
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>
Rozsah bajtů, který obsahuje data, která se mají odeslat.
Návraty
Počet odeslaných bajtů.
Výjimky
remoteEP
je null
.
Při pokusu o přístup k soketu došlo k chybě.
Byl Socket zavřený.
Platí pro
SendTo(Byte[], SocketFlags, EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle data do konkrétního koncového bodu pomocí zadaného SocketFlags.
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
Bitové kombinace SocketFlags hodnot.
Návraty
Počet odeslaných bajtů.
Výjimky
Při pokusu o přístup k soketu došlo k chybě.
Byl Socket zavřený.
Příklady
Následující příklad kódu odešle datagram bez připojení určenému vzdálenému hostiteli. SocketFlags jsou předány SendTo metodě.
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
Poznámky
Při tomto přetížení se posun vyrovnávací paměti standardně nastaví na 0 a počet bajtů, které se mají odeslat, se výchozí hodnota nastaví na velikost buffer
. Pokud jako socketflags
parametr zadáte DontRoute příznak, nebudou odesílaná data směrována.
Pokud používáte protokol bez připojení, nemusíte před voláním SendTometody vytvořit výchozího vzdáleného Connect hostitele. Stačí, když chcete metodu Send volat. Pokud zavoláte metodu Connect před voláním SendToremoteEP
, parametr přepíše zadaného výchozího vzdáleného hostitele pouze pro danou operaci odeslání. Také nemusíte volat metodu Bind , protože podkladový poskytovatel služeb přiřadí nejvhodnější místní síťovou adresu a číslo portu. Pokud potřebujete identifikovat přiřazenou adresu místní sítě a číslo portu, můžete použít LocalEndPoint vlastnost po SendTo úspěšném dokončení metody.
I když jsou určené pro protokoly bez připojení, SendTo funguje také s protokoly orientovanými na připojení. Pokud používáte protokol orientovaný na připojení, musíte nejprve navázat připojení vzdáleného hostitele voláním Connect metody nebo přijmout příchozí požadavek na připojení pomocí Accept metody . Pokud nenavážete nebo nepřijmete připojení ke vzdálenému hostiteli, SendTo vyvolá se SocketException. Před voláním metody můžete také vytvořit výchozího vzdáleného SendTo hostitele pro protokol bez připojení. V obou těchto případech SendTo bude parametr ignorovat remoteEP
a odesílat data pouze připojenému nebo výchozímu vzdálenému hostiteli.
Blokující sokety budou blokovány, dokud nebudou odeslány všechny požadované bajty v objektu buffer
. Vzhledem k tomu, že se neodblokování Socket dokončí okamžitě, nemusí odeslat všechny bajty v buffer
souboru . Je zodpovědností vaší aplikace sledovat počet odeslaných bajtů a opakovat operaci, dokud aplikace neodešle všechny bajty v buffer
souboru . Není také zaručeno, že se odeslaná data zobrazí v síti okamžitě. Aby se zvýšila efektivita sítě, základní systém může zpozdit přenos, dokud se neshromáždí značné množství odpojených dat. Úspěšné dokončení SendTo metody znamená, že základní systém měl prostor pro ukládání dat do vyrovnávací paměti pro odeslání do sítě.
Pokud používáte protokol bez připojení v režimu blokování, SendTo bude blokování až do odeslání datagramu. Pokud chcete odesílat data na adresu všesměrového vysílání, musíte nejprve zavolat metodu SetSocketOption a nastavit možnost soketu na SocketOptionName.Broadcast. Musíte se také ujistit, že počet odeslaných bajtů nepřekračuje maximální velikost paketů příslušného poskytovatele služeb. Pokud ano, datagram se neodesílají a SendTo vyvolá SocketException.
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API windows Sockets verze 2 .
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Viz také
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
Platí pro
SendTo(Byte[], EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle data do zadaného koncového bodu.
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
Návraty
Počet odeslaných bajtů
Výjimky
Při pokusu o přístup k soketu došlo k chybě.
Byl Socket zavřený.
Příklady
Následující příklad kódu odešle datagram bez připojení určenému vzdálenému hostiteli.
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
Poznámky
Při tomto přetížení se vyrovnávací paměť odsadí na hodnotu 0, počet bajtů pro odeslání výchozí hodnoty odpovídá velikosti parametru buffer
a SocketFlags výchozí hodnota je 0.
Pokud používáte protokol bez připojení, nemusíte před voláním SendTometody vytvořit výchozího vzdáleného Connect hostitele. Stačí, když chcete metodu Send volat. Pokud zavoláte metodu Connect před voláním SendToremoteEP
, parametr přepíše zadaného výchozího vzdáleného hostitele pouze pro danou operaci odeslání. Také nemusíte volat metodu Bind , protože podkladový poskytovatel služeb přiřadí nejvhodnější místní síťovou adresu a číslo portu. Pokud potřebujete identifikovat přiřazenou adresu místní sítě a číslo portu, můžete použít LocalEndPoint vlastnost po SendTo úspěšném dokončení metody.
I když jsou určené pro protokoly bez připojení, SendTo funguje také s protokoly orientovanými na připojení. Pokud používáte protokol orientovaný na připojení, musíte nejprve navázat připojení vzdáleného hostitele voláním Connect metody nebo přijmout příchozí požadavek na připojení pomocí Accept metody . Pokud nenavážete nebo nepřijmete připojení ke vzdálenému hostiteli, SendTo vyvolá se SocketException. Před voláním metody můžete také vytvořit výchozího vzdáleného SendTo hostitele pro protokol bez připojení. V obou těchto případech SendTo bude parametr ignorovat remoteEP
a odesílat data pouze připojenému nebo výchozímu vzdálenému hostiteli.
Blokující sokety budou blokovány, dokud nebudou odeslány všechny bajty ve vyrovnávací paměti. Vzhledem k tomu, že se neodblokování Socket dokončí okamžitě, nemusí odeslat všechny bajty v buffer
souboru . Je zodpovědností vaší aplikace sledovat počet odeslaných bajtů a opakovat operaci, dokud aplikace neodešle všechny bajty v buffer
souboru . Není také zaručeno, že se odeslaná data zobrazí v síti okamžitě. Za účelem zvýšení efektivity sítě může základní systém zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení SendTo metody znamená, že základní systém měl prostor pro ukládání dat do vyrovnávací paměti pro odeslání do sítě.
Pokud používáte protokol bez připojení v režimu blokování, SendTo bude blokování až do odeslání datagramu. Pokud chcete odesílat data na adresu všesměrového vysílání, musíte nejprve zavolat metodu SetSocketOption a nastavit možnost soketu na SocketOptionName.Broadcast. Musíte se také ujistit, že počet odeslaných bajtů nepřekračuje maximální velikost paketů příslušného poskytovatele služeb. Pokud ano, datagram se neodesílají a SendTo vyvolá SocketException.
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API windows Sockets verze 2 .
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Viz také
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
Platí pro
SendTo(ReadOnlySpan<Byte>, SocketFlags, EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle data do konkrétního koncového bodu pomocí zadaného SocketFlagsparametru .
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>
Rozsah bajtů obsahující data, která mají být odeslána.
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
Návraty
Počet odeslaných bajtů
Výjimky
remoteEP
je null
.
Při pokusu o přístup k soketu došlo k chybě.
Byla Socket uzavřena.