Socket.SendFile Metodo

Definizione

Invia un file e dati opzionali in modalità sincrona a un Socket connesso.

Overload

SendFile(String)

Invia il file fileName a un oggetto connesso Socket con il flag di trasmissione UseDefaultWorkerThread.

SendFile(String, Byte[], Byte[], TransmitFileOptions)

Invia il file fileName e i buffer di dati a un oggetto Socket connesso usando il valore di TransmitFileOptions specificato.

SendFile(String, ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, TransmitFileOptions)

Invia il file fileName e i buffer di dati a un oggetto Socket connesso usando il valore di TransmitFileOptions specificato.

SendFile(String)

Invia il file fileName a un oggetto connesso Socket con il flag di trasmissione UseDefaultWorkerThread.

public:
 void SendFile(System::String ^ fileName);
public void SendFile (string fileName);
public void SendFile (string? fileName);
member this.SendFile : string -> unit
Public Sub SendFile (fileName As String)

Parametri

fileName
String

Oggetto String che contiene il percorso e il nome del file da inviare. Questo parametro può essere null.

Eccezioni

Il socket non è connesso a un host remoto.

L'oggetto Socket è stato chiuso.

L'oggetto Socket non è in modalità di blocco e non può accettare questa chiamata sincrona.

Il parametro fileName del file non è stato trovato.

Si è verificato un errore durante il tentativo di accesso al socket.

Esempio

L'esempio di codice seguente crea e connette un socket e quindi invia un file all'host remoto. Il file "test.txt" si trova nella directory radice del computer locale.

// Establish the local endpoint for the socket.
IPHostEntry^ ipHost = Dns::GetHostEntry( Dns::GetHostName() );
IPAddress^ ipAddr = ipHost->AddressList[ 0 ];
IPEndPoint^ ipEndPoint = gcnew IPEndPoint( ipAddr,11000 );

// Create a TCP socket.
Socket^ client = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );

// Connect the socket to the remote endpoint.
client->Connect( ipEndPoint );

// There is a text file test.txt located in the root directory.
String^ fileName = "C:\\test.txt";

// Send file fileName to remote device
Console::WriteLine( "Sending {0} to the host.", fileName );
client->SendFile( fileName );

// Release the socket.
client->Shutdown( SocketShutdown::Both );
client->Close();
// Establish the local endpoint for the socket.
IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName());
IPAddress  ipAddr = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);

// Create a TCP socket.
Socket client = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream, ProtocolType.Tcp);

// Connect the socket to the remote endpoint.
client.Connect(ipEndPoint);

// There is a text file test.txt located in the root directory.
string fileName = "C:\\test.txt";

// Send file fileName to remote device
Console.WriteLine("Sending {0} to the host.", fileName);
client.SendFile(fileName);

// Release the socket.
client.Shutdown(SocketShutdown.Both);
client.Close();

Commenti

Questo overload invia il file fileName al socket connesso. Per impostazione predefinita, il flags parametro è (0) e i preBuffer parametri e postBuffer per impostazione predefinita sono null.UseDefaultWorkerThread Se fileName si trova nella directory locale, può essere identificato solo con il nome del file. In caso contrario, è necessario specificare il percorso completo e il nome del file. Caratteri jolly ("..\\myfile.txt") e i nomi di condivisione UNC ("\\\\shared directory\\myfile.txt") sono supportati. Se il file non viene trovato, viene generata l'eccezione FileNotFoundException .

Questo metodo usa la TransmitFile funzione trovata nell'API Windows Sockets 2. Per altre informazioni sulla TransmitFile funzione e sui relativi flag, vedere la documentazione di Windows Sockets.

SendFile Invia in modo sincrono un file all'host remoto specificato nel Connect metodo o Accept . SendFile può essere usato sia per i protocolli orientati alla connessione che per i protocolli senza connessione.

Se si usa un protocollo senza connessione, è necessario chiamare prima di chiamare Connect questo metodo. In caso contrario SendFile , viene generata un'eccezione SocketException . Se si usa un protocollo orientato alla connessione, è necessario usare Connect per stabilire una connessione host remota o usare Accept per accettare una connessione in ingresso.

Se si usa un protocollo orientato alla connessione, SendFile blocca fino all'invio del file. In modalità non di blocco, SendFile può essere completato correttamente prima dell'invio dell'intero file. Non esiste 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 SendFile metodo indica che il sistema sottostante ha avuto spazio per memorizzare nel buffer i dati per un invio di rete.

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.

Si applica a

SendFile(String, Byte[], Byte[], TransmitFileOptions)

Invia il file fileName e i buffer di dati a un oggetto Socket connesso usando il valore di TransmitFileOptions specificato.

public:
 void SendFile(System::String ^ fileName, cli::array <System::Byte> ^ preBuffer, cli::array <System::Byte> ^ postBuffer, System::Net::Sockets::TransmitFileOptions flags);
public void SendFile (string? fileName, byte[]? preBuffer, byte[]? postBuffer, System.Net.Sockets.TransmitFileOptions flags);
public void SendFile (string fileName, byte[] preBuffer, byte[] postBuffer, System.Net.Sockets.TransmitFileOptions flags);
member this.SendFile : string * byte[] * byte[] * System.Net.Sockets.TransmitFileOptions -> unit
Public Sub SendFile (fileName As String, preBuffer As Byte(), postBuffer As Byte(), flags As TransmitFileOptions)

Parametri

fileName
String

Percorso e nome del file da inviare. Questo parametro può essere null.

preBuffer
Byte[]

Dati da inviare prima dell'invio del file. Questo parametro può essere null.

postBuffer
Byte[]

Dati da inviare dopo l'invio del file. Questo parametro può essere null.

flags
TransmitFileOptions

Combinazione bit per bit dei valori di enumerazione che specifica la modalità di trasferimento del file.

Eccezioni

Il sistema operativo non è Windows NT o versioni successive.

-oppure-

Il socket non è connesso a un host remoto.

L'oggetto Socket è stato chiuso.

L'oggetto Socket non è in modalità di blocco e non può accettare questa chiamata sincrona.

Il parametro fileName del file non è stato trovato.

Si è verificato un errore durante il tentativo di accesso al socket.

Esempio

Nell'esempio di codice seguente viene creato e connesso un socket. Il file "test.txt" si trova nella directory radice del computer locale. In questo esempio viene creato un prebuffer e un postbuffer di dati e li si invia all'host remoto con il file . Viene utilizzata l'impostazione predefinita TransmitFileOptions .

// Establish the local endpoint for the socket.
IPHostEntry^ ipHost = Dns::GetHostEntry( Dns::GetHostName() );
IPAddress^ ipAddr = ipHost->AddressList[ 0 ];
IPEndPoint^ ipEndPoint = gcnew IPEndPoint( ipAddr,11000 );

// Create a TCP socket.
Socket^ client = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );

// Connect the socket to the remote endpoint.
client->Connect( ipEndPoint );

// Send file fileName to the remote host with preBuffer and postBuffer data.
// There is a text file test.txt located in the root directory.
String^ fileName = "C:\\test.txt";

// Create the preBuffer data.
String^ string1 = String::Format( "This is text data that precedes the file.{0}", Environment::NewLine );
array<Byte>^preBuf = Encoding::ASCII->GetBytes( string1 );

// Create the postBuffer data.
String^ string2 = String::Format( "This is text data that will follow the file.{0}", Environment::NewLine );
array<Byte>^postBuf = Encoding::ASCII->GetBytes( string2 );

//Send file fileName with buffers and default flags to the remote device.
Console::WriteLine( "Sending {0} with buffers to the host.{1}", fileName, Environment::NewLine );
client->SendFile( fileName, preBuf, postBuf, TransmitFileOptions::UseDefaultWorkerThread );

// Release the socket.
client->Shutdown( SocketShutdown::Both );
client->Close();
// Establish the local endpoint for the socket.
IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName());
IPAddress  ipAddr = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);

// Create a TCP socket.
Socket client = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream, ProtocolType.Tcp);

// Connect the socket to the remote endpoint.
client.Connect(ipEndPoint);

// Send file fileName to the remote host with preBuffer and postBuffer data.
// There is a text file test.txt located in the root directory.
string fileName = "C:\\test.txt";

// Create the preBuffer data.
string string1 = String.Format("This is text data that precedes the file.{0}", Environment.NewLine);
byte[] preBuf = Encoding.ASCII.GetBytes(string1);

// Create the postBuffer data.
string string2 = String.Format("This is text data that will follow the file.{0}", Environment.NewLine);
byte[] postBuf = Encoding.ASCII.GetBytes(string2);

//Send file fileName with buffers and default flags to the remote device.
Console.WriteLine("Sending {0} with buffers to the host.{1}", fileName, Environment.NewLine);
client.SendFile(fileName, preBuf, postBuf, TransmitFileOptions.UseDefaultWorkerThread);

// Release the socket.
client.Shutdown(SocketShutdown.Both);
client.Close();

Commenti

Questo overload richiede il nome del file da inviare e una combinazione bit per bit di TransmitFileOptions valori. Il preBuffer parametro contiene tutti i dati che si desidera precedere il file. postBuffer contiene dati che si desidera seguire il file. Se fileName si trova nella directory di lavoro corrente, può essere identificato solo con il nome del file. In caso contrario, è necessario specificare il percorso completo e il nome del file. Caratteri jolly ("..\\myfile.txt") e i nomi di condivisione UNC ("\\\\shared directory\\myfile.txt") sono supportati.

Il flags parametro fornisce al provider di servizi Window Sockets informazioni aggiuntive sul trasferimento di file. Per altre informazioni su come usare questo parametro, vedere TransmitFileOptions.

Questo metodo usa la TransmitFile funzione trovata nell'API Windows Sockets 2. Per altre informazioni sulla TransmitFile funzione e sui relativi flag, vedere la documentazione di Windows Sockets.

SendFile Invia in modo sincrono un file all'host remoto specificato nel Connect metodo o Accept . SendFile può essere usato sia per i protocolli orientati alla connessione che per i protocolli senza connessione.

Se si usa un protocollo senza connessione, è necessario chiamare prima di chiamare Connect questo metodo; in caso contrario SendFile , genera un'eccezione SocketException. Se si usa un protocollo orientato alla connessione, è necessario usare Connect per stabilire una connessione host remota o usare Accept per accettare una connessione in ingresso.

Se si usa un protocollo orientato alla connessione, SendFile blocca fino a quando non viene inviato l'intero file. In modalità non di blocco, SendFile può essere completato correttamente prima dell'invio dell'intero file. Non esiste 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 SendFile metodo indica che il sistema sottostante ha avuto spazio per memorizzare nel buffer i dati per un invio di rete.

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.

Si applica a

SendFile(String, ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, TransmitFileOptions)

Invia il file fileName e i buffer di dati a un oggetto Socket connesso usando il valore di TransmitFileOptions specificato.

public:
 void SendFile(System::String ^ fileName, ReadOnlySpan<System::Byte> preBuffer, ReadOnlySpan<System::Byte> postBuffer, System::Net::Sockets::TransmitFileOptions flags);
public void SendFile (string? fileName, ReadOnlySpan<byte> preBuffer, ReadOnlySpan<byte> postBuffer, System.Net.Sockets.TransmitFileOptions flags);
member this.SendFile : string * ReadOnlySpan<byte> * ReadOnlySpan<byte> * System.Net.Sockets.TransmitFileOptions -> unit
Public Sub SendFile (fileName As String, preBuffer As ReadOnlySpan(Of Byte), postBuffer As ReadOnlySpan(Of Byte), flags As TransmitFileOptions)

Parametri

fileName
String

Oggetto String che contiene il percorso e il nome del file da inviare. Questo parametro può essere null.

preBuffer
ReadOnlySpan<Byte>

Oggetto ReadOnlySpan<T> contenente i dati da inviare prima dell'invio del file. Questo buffer può essere vuoto.

postBuffer
ReadOnlySpan<Byte>

Oggetto ReadOnlySpan<T> contenente i dati da inviare dopo l'invio del file. Questo buffer può essere vuoto.

flags
TransmitFileOptions

Uno o più valori di TransmitFileOptions.

Eccezioni

L'oggetto Socket è stato chiuso.

L'oggetto Socket non è connesso a un host remoto.

L'oggetto Socket non è in modalità di blocco e non può accettare questa chiamata sincrona.

Il parametro fileName del file non è stato trovato.

Si è verificato un errore durante il tentativo di accesso al socket.

Si applica a