Socket.SendTo Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Invia dati a uno specifico endpoint.
Overload
SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint) |
Invia il numero di byte di dati specificato all'endpoint specificato, a partire dalla posizione specificata nel buffer, utilizzando l'oggetto SocketFlags specificato. |
SendTo(Byte[], Int32, SocketFlags, EndPoint) |
Invia il numero specificato di byte di dati all'endpoint specificato, utilizzando l'oggetto SocketFlags specificato. |
SendTo(ReadOnlySpan<Byte>, SocketFlags, SocketAddress) |
Invia dati a un endpoint specifico utilizzando l'oggetto SocketFlags specificato. |
SendTo(ReadOnlySpan<Byte>, EndPoint) |
Invia dati a un endpoint specifico. |
SendTo(Byte[], SocketFlags, EndPoint) |
Invia dati a un endpoint specifico utilizzando l'oggetto SocketFlags specificato. |
SendTo(Byte[], EndPoint) |
Invia dati a un endpoint specifico. |
SendTo(ReadOnlySpan<Byte>, SocketFlags, EndPoint) |
Invia dati a un endpoint specifico utilizzando l'oggetto SocketFlags specificato. |
SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Origine:
- Socket.cs
- Origine:
- Socket.cs
- Origine:
- Socket.cs
Invia il numero di byte di dati specificato all'endpoint specificato, a partire dalla posizione specificata nel buffer, utilizzando l'oggetto SocketFlags specificato.
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
Parametri
- offset
- Int32
Posizione nel buffer di dati da cui iniziare l'invio di dati.
- size
- Int32
Numero di byte da inviare.
- socketFlags
- SocketFlags
Combinazione bit per bit dei valori di SocketFlags.
Restituisce
Numero di byte inviati.
Eccezioni
offset
è minore di 0.
-oppure-
offset
è maggiore della lunghezza di buffer
.
-oppure-
size
è minore di 0.
-oppure-
size
è maggiore della lunghezza di buffer
meno il valore del parametro offset
.
socketFlags
non è una combinazione valida di valori.
-oppure-
Si verifica un errore del sistema operativo durante l'accesso a Socket.
L'oggetto Socket è stato chiuso.
Uno dei chiamanti nello stack di chiamate non dispone delle autorizzazioni richieste.
Esempio
Nell'esempio di codice seguente viene inviato un datagramma senza connessione all'host remoto specificato. L'offset, le dimensioni e SocketFlags il metodo vengono passati al SendTo metodo .
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
Commenti
In questo overload, se si specifica il DontRoute flag come socketflags
parametro, i dati inviati non verranno indirizzati.
Se si usa un protocollo senza connessione, non è necessario stabilire un host remoto predefinito con il Connect metodo prima di chiamare SendTo. È necessario eseguire questa operazione solo se si intende chiamare il Send metodo. Se si chiama il Connect metodo prima di chiamare SendTo, il remoteEP
parametro eseguirà l'override dell'host remoto predefinito specificato solo per tale operazione di invio. Non è inoltre necessario chiamare il metodo, perché il provider di servizi sottostante assegna l'indirizzo Bind di rete e il numero di porta più appropriato. Se è necessario identificare l'indirizzo di rete locale assegnato e il numero di porta, è possibile usare la LocalEndPoint proprietà dopo il completamento del SendTo metodo.
Anche se destinato ai protocolli senza connessione, SendTo funziona anche con protocolli orientati alla connessione. Se si usa un protocollo orientato alla connessione, è prima necessario stabilire una connessione host remota chiamando il metodo o accettando una richiesta di connessione in ingresso usando il ConnectAccept metodo . Se non si stabilisce o si accetta una connessione host remota, SendTo verrà generata una SocketExceptionclasse . È anche possibile stabilire un host remoto predefinito per un protocollo senza connessione prima di chiamare il SendTo metodo. In uno di questi casi, SendTo ignora il remoteEP
parametro e invia solo i dati all'host remoto connesso o predefinito.
I socket di blocco bloccano finché non viene inviato il numero richiesto di byte. Poiché un blocco Socket non viene completato immediatamente, potrebbe non inviare tutti i byte richiesti in una singola operazione. È responsabilità delle applicazioni tenere traccia del numero di byte inviati e riprovare l'operazione fino a quando l'applicazione invia il numero richiesto di byte. Non vi è anche alcuna garanzia che i dati inviati verranno visualizzati immediatamente nella rete. Per aumentare l'efficienza della rete, il sistema sottostante può ritardare la trasmissione fino a quando non viene raccolta una quantità significativa di dati in uscita. Un completamento riuscito del SendTo metodo significa che il sistema sottostante ha avuto spazio per bufferre i dati per un invio di rete.
Se si usa un protocollo senza connessione in modalità di blocco, SendTo il datagram non verrà inviato. Se si desidera inviare dati a un indirizzo di trasmissione, è prima necessario chiamare il SetSocketOption metodo e impostare l'opzione socket su SocketOptionName.Broadcast. È anche necessario assicurarsi che le dimensioni non superino le dimensioni massime del provider di servizi sottostanti. In caso contrario, il datagram non verrà inviato e SendTo genererà un SocketExceptionoggetto .
Nota
Se si riceve un SocketExceptionoggetto , utilizzare la proprietà per ottenere il SocketException.ErrorCode codice di errore specifico. Dopo aver ottenuto questo codice, vedere la documentazione del codice di errore dell'API Windows Sockets versione 2 per una descrizione dettagliata dell'errore.
Nota
Questo membro genera informazioni di traccia quando viene abilitata la funzionalità di traccia di rete nell'applicazione in uso. Per altre informazioni, vedere Traccia di rete in .NET Framework.
Vedi anche
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
Si applica a
SendTo(Byte[], Int32, SocketFlags, EndPoint)
- Origine:
- Socket.cs
- Origine:
- Socket.cs
- Origine:
- Socket.cs
Invia il numero specificato di byte di dati all'endpoint specificato, utilizzando l'oggetto SocketFlags specificato.
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
Parametri
- size
- Int32
Numero di byte da inviare.
- socketFlags
- SocketFlags
Combinazione bit per bit dei valori di SocketFlags.
Restituisce
Numero di byte inviati.
Eccezioni
Il parametro size
eccede la dimensione di buffer
.
Si è verificato un errore durante il tentativo di accesso al socket.
L'oggetto Socket è stato chiuso.
Esempio
Nell'esempio di codice seguente viene inviato un datagramma senza connessione all'host remoto specificato. Le dimensioni e SocketFlags vengono passate al SendTo metodo .
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
Commenti
In questo overload l'offset del buffer viene impostato su 0. Se si specifica il DontRoute flag come socketflags
parametro, i dati inviati non verranno indirizzati.
Se si usa un protocollo senza connessione, non è necessario stabilire un host remoto predefinito con il Connect metodo prima di chiamare SendTo. È necessario eseguire questa operazione solo se si intende chiamare il Send metodo. Se si chiama il Connect metodo prima di chiamare SendTo, il remoteEP
parametro eseguirà l'override dell'host remoto predefinito specificato solo per tale operazione di invio. Non è inoltre necessario chiamare il metodo, perché il provider di servizi sottostante assegna l'indirizzo Bind di rete e il numero di porta più appropriato. Se è necessario identificare l'indirizzo di rete locale assegnato e il numero di porta, è possibile usare la LocalEndPoint proprietà dopo il completamento del SendTo metodo.
Anche se destinato ai protocolli senza connessione, SendTo funziona anche con protocolli orientati alla connessione. Se si usa un protocollo orientato alla connessione, è prima necessario stabilire una connessione host remota chiamando il metodo o accettando una richiesta di connessione in ingresso usando il ConnectAccept metodo . Se non si stabilisce o si accetta una connessione host remota, SendTo verrà generata una SocketExceptionclasse . È anche possibile stabilire un host remoto predefinito per un protocollo senza connessione prima di chiamare il SendTo metodo. In uno di questi casi, SendTo ignora il remoteEP
parametro e invia solo i dati all'host remoto connesso o predefinito.
I socket di blocco bloccano finché non viene inviato il numero richiesto di byte. Poiché un blocco Socket non viene completato immediatamente, potrebbe non inviare tutti i byte richiesti in una singola operazione. È responsabilità dell'applicazione tenere traccia del numero di byte inviati e riprovare l'operazione fino a quando l'applicazione invia il numero richiesto di byte. Non vi è anche alcuna garanzia che i dati inviati verranno visualizzati immediatamente nella rete. Per aumentare l'efficienza della rete, il sistema sottostante può ritardare la trasmissione fino a quando non viene raccolta una quantità significativa di dati in uscita. Un completamento riuscito del SendTo metodo significa che il sistema sottostante ha avuto spazio per bufferre i dati per un invio di rete.
Se si usa un protocollo senza connessione in modalità di blocco, SendTo il datagram non verrà inviato. Se si desidera inviare dati a un indirizzo di trasmissione, è prima necessario chiamare il SetSocketOption metodo e impostare l'opzione socket su SocketOptionName.Broadcast. È inoltre necessario assicurarsi che il numero di byte inviati non superi le dimensioni massime del pacchetto del provider di servizi sottostante. In caso affermativo, il datagramma non verrà inviato e SendTo genererà un'eccezione SocketException.
Nota
Se si riceve un SocketExceptionoggetto , utilizzare la SocketException.ErrorCode proprietà per ottenere il codice di errore specifico. Dopo aver ottenuto questo codice, fare riferimento alla documentazione relativa al codice di errore dell'API Windows Sockets versione 2 per una descrizione dettagliata dell'errore.
Nota
Questo membro genera informazioni di traccia quando viene abilitata la funzionalità di traccia di rete nell'applicazione in uso. Per altre informazioni, vedere Traccia di rete in .NET Framework.
Vedi anche
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
Si applica a
SendTo(ReadOnlySpan<Byte>, SocketFlags, SocketAddress)
- Origine:
- Socket.cs
- Origine:
- Socket.cs
Invia dati a un endpoint specifico utilizzando l'oggetto SocketFlags specificato.
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
Parametri
- buffer
- ReadOnlySpan<Byte>
Intervallo di byte che contiene i dati da inviare.
- socketFlags
- SocketFlags
Combinazione bit per bit dei SocketFlags valori che verranno usati durante l'invio dei dati.
- socketAddress
- SocketAddress
Classe SocketAddress che rappresenta la destinazione dei dati.
Restituisce
Numero di byte inviati.
Eccezioni
socketAddress
è null
.
Si è verificato un errore durante il tentativo di accesso al socket.
L'oggetto Socket è stato chiuso.
Si applica a
SendTo(ReadOnlySpan<Byte>, EndPoint)
- Origine:
- Socket.cs
- Origine:
- Socket.cs
- Origine:
- Socket.cs
Invia dati a un endpoint specifico.
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
Parametri
- buffer
- ReadOnlySpan<Byte>
Intervallo di byte che contiene i dati da inviare.
Restituisce
Numero di byte inviati.
Eccezioni
remoteEP
è null
.
Si è verificato un errore durante il tentativo di accesso al socket.
L'oggetto Socket è stato chiuso.
Si applica a
SendTo(Byte[], SocketFlags, EndPoint)
- Origine:
- Socket.cs
- Origine:
- Socket.cs
- Origine:
- Socket.cs
Invia dati a un endpoint specifico utilizzando l'oggetto SocketFlags specificato.
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
Parametri
- socketFlags
- SocketFlags
Combinazione bit per bit dei valori di SocketFlags.
Restituisce
Numero di byte inviati.
Eccezioni
Si è verificato un errore durante il tentativo di accesso al socket.
L'oggetto Socket è stato chiuso.
Esempio
Nell'esempio di codice seguente viene inviato un datagram senza connessione all'host remoto specificato. SocketFlags vengono passati al SendTo metodo .
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
Commenti
In questo overload, l'offset del buffer viene predefinito su 0 e il numero di byte da inviare per impostazione predefinita alle dimensioni dell'oggetto buffer
. Se si specifica il DontRoute flag come socketflags
parametro, i dati inviati non verranno instradati.
Se si usa un protocollo senza connessione, non è necessario stabilire un host remoto predefinito con il Connect metodo prima di chiamare SendTo. Questa operazione deve essere eseguita solo se si intende chiamare il Send metodo . Se si chiama il Connect metodo prima di chiamare SendTo, il remoteEP
parametro eseguirà l'override dell'host remoto predefinito specificato solo per l'operazione di invio. Non è inoltre necessario chiamare il Bind metodo, perché il provider di servizi sottostante assegnerà l'indirizzo di rete locale e il numero di porta più appropriati. Se è necessario identificare l'indirizzo di rete locale assegnato e il numero di porta, è possibile usare la LocalEndPoint proprietà al termine del SendTo metodo.
Anche se destinato ai protocolli senza connessione, SendTo funziona anche con i protocolli orientati alla connessione. Se si usa un protocollo orientato alla connessione, è innanzitutto necessario stabilire una connessione host remota chiamando il Connect metodo o accettando una richiesta di connessione in ingresso usando il Accept metodo . Se non si stabilisce o accetta una connessione host remota, SendTo genera un'eccezione SocketException. È anche possibile stabilire un host remoto predefinito per un protocollo senza connessione prima di chiamare il SendTo metodo . In uno di questi casi, SendTo ignorerà il remoteEP
parametro e invierà solo i dati all'host remoto connesso o predefinito.
I socket di blocco verranno bloccati fino a quando non vengono inviati tutti i byte richiesti in buffer
. Poiché un non bloccante Socket viene completato immediatamente, potrebbe non inviare tutti i byte in buffer
. È responsabilità dell'applicazione tenere traccia del numero di byte inviati e ripetere l'operazione fino a quando l'applicazione non invia tutti i byte in buffer
. Non esiste inoltre alcuna garanzia che i dati inviati vengano visualizzati immediatamente nella rete. Per aumentare l'efficienza della rete, il sistema sottostante può ritardare la trasmissione fino a quando non viene raccolta una quantità significativa di dati in uscita. Un completamento corretto del SendTo metodo indica che il sistema sottostante ha avuto spazio per memorizzare nel buffer i dati per un invio di rete.
Se si usa un protocollo senza connessione in modalità di blocco, SendTo verrà bloccato fino all'invio del datagramma. Se si desidera inviare dati a un indirizzo broadcast, è necessario chiamare il SetSocketOption metodo e impostare l'opzione socket su SocketOptionName.Broadcast. È inoltre necessario assicurarsi che il numero di byte inviati non superi le dimensioni massime del pacchetto del provider di servizi sottostante. In caso affermativo, il datagramma non verrà inviato e SendTo genererà un'eccezione SocketException.
Nota
Se si riceve un SocketExceptionoggetto , utilizzare la SocketException.ErrorCode proprietà per ottenere il codice di errore specifico. Dopo aver ottenuto questo codice, fare riferimento alla documentazione relativa al codice di errore dell'API Windows Sockets versione 2 per una descrizione dettagliata dell'errore.
Nota
Questo membro genera informazioni di traccia quando viene abilitata la funzionalità di traccia di rete nell'applicazione in uso. Per altre informazioni, vedere Traccia di rete in .NET Framework.
Vedi anche
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
Si applica a
SendTo(Byte[], EndPoint)
- Origine:
- Socket.cs
- Origine:
- Socket.cs
- Origine:
- Socket.cs
Invia dati a un endpoint specifico.
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
Parametri
Restituisce
Numero di byte inviati.
Eccezioni
Si è verificato un errore durante il tentativo di accesso al socket.
L'oggetto Socket è stato chiuso.
Esempio
Nell'esempio di codice seguente viene inviato un datagram senza connessione all'host remoto specificato.
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
Commenti
In questo overload, l'offset del buffer viene impostato su 0, il numero di byte da inviare per impostazione predefinita alle dimensioni del buffer
parametro e il SocketFlags valore predefinito è 0.
Se si usa un protocollo senza connessione, non è necessario stabilire un host remoto predefinito con il Connect metodo prima di chiamare SendTo. Questa operazione deve essere eseguita solo se si intende chiamare il Send metodo . Se si chiama il Connect metodo prima di chiamare SendTo, il remoteEP
parametro eseguirà l'override dell'host remoto predefinito specificato solo per l'operazione di invio. Non è inoltre necessario chiamare il Bind metodo, perché il provider di servizi sottostante assegnerà l'indirizzo di rete locale e il numero di porta più appropriati. Se è necessario identificare l'indirizzo di rete locale assegnato e il numero di porta, è possibile usare la LocalEndPoint proprietà al termine del SendTo metodo.
Anche se destinato ai protocolli senza connessione, SendTo funziona anche con i protocolli orientati alla connessione. Se si usa un protocollo orientato alla connessione, è innanzitutto necessario stabilire una connessione host remota chiamando il Connect metodo o accettando una richiesta di connessione in ingresso usando il Accept metodo . Se non si stabilisce o accetta una connessione host remota, SendTo genera un'eccezione SocketException. È anche possibile stabilire un host remoto predefinito per un protocollo senza connessione prima di chiamare il SendTo metodo . In uno di questi casi, SendTo ignorerà il remoteEP
parametro e invierà solo i dati all'host remoto connesso o predefinito.
I socket di blocco verranno bloccati fino a quando non vengono inviati tutti i byte nel buffer. Poiché un non bloccante Socket viene completato immediatamente, potrebbe non inviare tutti i byte in buffer
. È responsabilità dell'applicazione tenere traccia del numero di byte inviati e ripetere l'operazione fino a quando l'applicazione non invia tutti i byte in buffer
. Non esiste inoltre alcuna garanzia che i dati inviati vengano visualizzati immediatamente nella rete. Per aumentare l'efficienza della rete, il sistema sottostante può ritardare la trasmissione fino a quando non viene raccolta una quantità significativa di dati in uscita. Un completamento corretto del SendTo metodo indica che il sistema sottostante ha avuto spazio per memorizzare nel buffer i dati per un invio di rete.
Se si usa un protocollo senza connessione in modalità di blocco, SendTo verrà bloccato fino all'invio del datagramma. Se si desidera inviare dati a un indirizzo broadcast, è necessario chiamare il SetSocketOption metodo e impostare l'opzione socket su SocketOptionName.Broadcast. È inoltre necessario assicurarsi che il numero di byte inviati non superi le dimensioni massime del pacchetto del provider di servizi sottostante. In caso affermativo, il datagramma non verrà inviato e SendTo genererà un'eccezione SocketException.
Nota
Se si riceve un SocketExceptionoggetto , utilizzare la SocketException.ErrorCode proprietà per ottenere il codice di errore specifico. Dopo aver ottenuto questo codice, fare riferimento alla documentazione relativa al codice di errore dell'API Windows Sockets versione 2 per una descrizione dettagliata dell'errore.
Nota
Questo membro genera informazioni di traccia quando viene abilitata la funzionalità di traccia di rete nell'applicazione in uso. Per altre informazioni, vedere Traccia di rete in .NET Framework.
Vedi anche
- Connect(EndPoint)
- Bind(EndPoint)
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- LocalEndPoint
Si applica a
SendTo(ReadOnlySpan<Byte>, SocketFlags, EndPoint)
- Origine:
- Socket.cs
- Origine:
- Socket.cs
- Origine:
- Socket.cs
Invia dati a un endpoint specifico utilizzando l'oggetto SocketFlags specificato.
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
Parametri
- buffer
- ReadOnlySpan<Byte>
Intervallo di byte che contiene i dati da inviare.
- socketFlags
- SocketFlags
Combinazione bit per bit dei valori di SocketFlags.
Restituisce
Numero di byte inviati.
Eccezioni
remoteEP
è null
.
Si è verificato un errore durante il tentativo di accesso al socket.
L'oggetto Socket è stato chiuso.