Socket.SendFile Método

Definição

Envia um arquivo e dados opcionais de forma síncrona para um Socket conectado.Sends a file and optional data synchronously to a connected Socket.

Sobrecargas

SendFile(String)

Envia o arquivo fileName para um objeto Socket conectado com o sinalizador de transmissão UseDefaultWorkerThread.Sends the file fileName to a connected Socket object with the UseDefaultWorkerThread transmit flag.

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

Envia o arquivo fileName e buffers de dados a um Socket conectado usando o valor TransmitFileOptions especificado.Sends the file fileName and buffers of data to a connected Socket object using the specified TransmitFileOptions value.

SendFile(String)

Envia o arquivo fileName para um objeto Socket conectado com o sinalizador de transmissão UseDefaultWorkerThread.Sends the file fileName to a connected Socket object with the UseDefaultWorkerThread transmit flag.

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

Parâmetros

fileName
String

Um String que contém o caminho e o nome do arquivo a ser enviado.A String that contains the path and name of the file to be sent. Esse parâmetro pode ser null.This parameter can be null.

Exceções

O soquete não está conectado a um host remoto.The socket is not connected to a remote host.

O objeto Socket foi fechado.The Socket object has been closed.

O objeto Socket não está no modo de bloqueio e não pode aceitar essa chamada síncrona.The Socket object is not in blocking mode and cannot accept this synchronous call.

O arquivo fileName não foi encontrado.The file fileName was not found.

Ocorreu um erro ao tentar acessar o soquete.An error occurred when attempting to access the socket.

Exemplos

O exemplo de código a seguir cria e conecta um soquete e, em seguida, envia um arquivo para o host remoto.The following code example creates and connects a socket and then sends a file to the remote host. O arquivo "test.txt" está localizado no diretório raiz do computador local.The file "test.txt" is located in the root directory of the local machine.

// 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();

Comentários

Essa sobrecarga envia o arquivo fileName para o Soquete conectado.This overload sends the file fileName to the connected socket. O flags parâmetro assume como padrão UseDefaultWorkerThread (0) e os preBuffer parâmetros e são postBuffer padrão para null .The flags parameter defaults to UseDefaultWorkerThread (0), and the preBuffer and postBuffer parameters default to null. Se fileName estiver no diretório local, ele poderá ser identificado apenas com o nome do arquivo; caso contrário, o caminho completo e o nome do arquivo deverão ser especificados.If fileName is in the local directory, it may be identified with just the name of the file; otherwise, the full path and name of the file must be specified. Caracteres curinga (".. \\myfile.txt ") e os nomes de compartilhamento UNC (" \ \ \ \Shared Directory \\myfile.txt ") têm suporte.Wildcards ("..\\myfile.txt") and UNC share names ("\\\\shared directory\\myfile.txt") are supported. Se o arquivo não for encontrado, a exceção FileNotFoundException será lançada.If the file is not found, the exception FileNotFoundException is thrown.

Esse método usa a TransmitFile função encontrada na API do Windows Sockets 2.This method uses the TransmitFile function found in the Windows Sockets 2 API. Para obter mais informações sobre a TransmitFile função e seus sinalizadores, consulte a documentação do Windows Sockets .For more information about the TransmitFile function and its flags, see the Windows Sockets documentation.

SendFile envia de forma síncrona um arquivo para o host remoto especificado Connect no Accept método ou.SendFile synchronously sends a file to the remote host specified in the Connect or Accept method. SendFile pode ser usado para os protocolos orientados por conexão e sem conexão.SendFile can be used for both connection-oriented and for connectionless protocols.

Se você estiver usando um protocolo sem conexão, deverá chamar Connect antes de chamar esse método, caso contrário, SendFile lançará uma SocketException exceção.If you are using a connectionless protocol, you must call Connect before calling this method, otherwise SendFile throws a SocketException exception. Se você estiver usando um protocolo orientado a conexão, deverá usar o Connect para estabelecer uma conexão de host remoto ou usar o Accept para aceitar uma conexão de entrada.If you are using a connection-oriented protocol, you must either use Connect to establish a remote host connection or use Accept to accept an incoming connection.

Se você estiver usando um protocolo orientado a conexão, SendFile o bloqueará até que o arquivo seja enviado.If you are using a connection-oriented protocol, SendFile blocks until the file is sent. No modo não bloqueado, SendFile o pode ser concluído com êxito antes de o arquivo inteiro ser enviado.In nonblocking mode, SendFile may complete successfully before the entire file has been sent. Não há nenhuma garantia de que os dados que você enviar aparecerão na rede imediatamente.There is no guarantee that the data you send will appear on the network immediately. Para aumentar a eficiência da rede, o sistema subjacente pode atrasar a transmissão até que uma quantidade significativa de dados de saída seja coletada.To increase network efficiency, the underlying system may delay transmission until a significant amount of outgoing data is collected. Uma conclusão bem-sucedida do SendFile método significa que o sistema subjacente tinha espaço para armazenar em buffer os dados de um envio de rede.A successful completion of the SendFile method means that the underlying system has had room to buffer your data for a network send.

Observação

Se você receber um SocketException , use a SocketException.ErrorCode propriedade para obter o código de erro específico.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. Depois de obter esse código, consulte a documentação do código de erro da API do Windows Sockets versão 2 para obter uma descrição detalhada do erro.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Observação

Esse membro emite o rastreamento de informações quando você ativa o rastreamento de rede em seu aplicativo.This member outputs trace information when you enable network tracing in your application. Para obter mais informações, consulte rastreamento de rede na .NET Framework.For more information, see Network Tracing in the .NET Framework.

Aplica-se a

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

Envia o arquivo fileName e buffers de dados a um Socket conectado usando o valor TransmitFileOptions especificado.Sends the file fileName and buffers of data to a connected Socket object using the specified TransmitFileOptions value.

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)

Parâmetros

fileName
String

Um String que contém o caminho e o nome do arquivo a ser enviado.A String that contains the path and name of the file to be sent. Esse parâmetro pode ser null.This parameter can be null.

preBuffer
Byte[]

Uma matriz Byte que contém dados a serem enviados antes de o arquivo ser enviado.A Byte array that contains data to be sent before the file is sent. Esse parâmetro pode ser null.This parameter can be null.

postBuffer
Byte[]

Uma matriz Byte que contém dados a serem enviados depois de o arquivo ser enviado.A Byte array that contains data to be sent after the file is sent. Esse parâmetro pode ser null.This parameter can be null.

flags
TransmitFileOptions

Um ou mais valores TransmitFileOptions.One or more of TransmitFileOptions values.

Exceções

O sistema operacional não é o Windows NT ou posterior.The operating system is not Windows NT or later.

- ou --or-

O soquete não está conectado a um host remoto.The socket is not connected to a remote host.

O objeto Socket foi fechado.The Socket object has been closed.

O objeto Socket não está no modo de bloqueio e não pode aceitar essa chamada síncrona.The Socket object is not in blocking mode and cannot accept this synchronous call.

O arquivo fileName não foi encontrado.The file fileName was not found.

Ocorreu um erro ao tentar acessar o soquete.An error occurred when attempting to access the socket.

Exemplos

O exemplo de código a seguir cria e conecta um soquete.The following code example creates and connects a socket. O arquivo "test.txt" está localizado no diretório raiz do computador local.The file "test.txt" is located in the root directory of the local machine. Neste exemplo, criamos um buffer e um buffer de dados e os enviamos para o host remoto com o arquivo.In this example, we create a prebuffer and postbuffer of data and send them to the remote host with the file. O padrão TransmitFileOptions é usado.The default TransmitFileOptions are used.

// 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();

Comentários

Essa sobrecarga requer o nome do arquivo que você deseja enviar e uma combinação de valores de bit que seja TransmitFileOptions .This overload requires the name of the file you want to send and a bitwise combination of TransmitFileOptions values. O preBuffer parâmetro contém todos os dados que você deseja preceder o arquivo.The preBuffer parameter contains any data you want to precede the file. postBuffer contém os dados que você deseja que siga o arquivo.postBuffer contains data you want to follow the file. Se o fileName estiver no diretório de trabalho atual, ele poderá ser identificado apenas com o nome do arquivo; caso contrário, o caminho completo e o nome do arquivo deverão ser especificados.If fileName is in the current working directory, it may be identified with just the name of the file; otherwise, the full path and name of the file must be specified. Caracteres curinga (".. \\myfile.txt ") e os nomes de compartilhamento UNC (" \ \ \ \Shared Directory \\myfile.txt ") têm suporte.Wildcards ("..\\myfile.txt") and UNC share names ("\\\\shared directory\\myfile.txt") are supported.

O flags parâmetro fornece o provedor de serviços do Window Sockets com informações adicionais sobre a transferência de arquivos.The flags parameter provides the Window Sockets service provider with additional information about the file transfer. Para obter mais informações sobre como usar esse parâmetro, consulte TransmitFileOptions .For more information about how to use this parameter, see TransmitFileOptions.

Esse método usa a TransmitFile função encontrada na API do Windows Sockets 2.This method uses the TransmitFile function found in the Windows Sockets 2 API. Para obter mais informações sobre a TransmitFile função e seus sinalizadores, consulte a documentação do Windows Sockets .For more information about the TransmitFile function and its flags, see the Windows Sockets documentation.

SendFile envia de forma síncrona um arquivo para o host remoto especificado Connect no Accept método ou.SendFile synchronously sends a file to the remote host specified in the Connect or Accept method. SendFile pode ser usado para os protocolos orientados por conexão e sem conexão.SendFile can be used for both connection-oriented and for connectionless protocols.

Se você estiver usando um protocolo sem conexão, deverá chamar Connect antes de chamar esse método; caso contrário, SendFile lança um SocketException .If you are using a connectionless protocol, you must call Connect before calling this method; otherwise SendFile throws a SocketException. Se você estiver usando um protocolo orientado a conexão, deverá usar o Connect para estabelecer uma conexão de host remoto ou usar o Accept para aceitar uma conexão de entrada.If you are using a connection-oriented protocol, you must either use Connect to establish a remote host connection, or use Accept to accept an incoming connection.

Se você estiver usando um protocolo orientado a conexão, SendFile o bloqueará até que todo o arquivo seja enviado.If you are using a connection-oriented protocol, SendFile blocks until the entire file is sent. No modo não bloqueado, SendFile o pode ser concluído com êxito antes de o arquivo inteiro ser enviado.In nonblocking mode, SendFile may complete successfully before the entire file has been sent. Não há nenhuma garantia de que os dados que você enviar aparecerão na rede imediatamente.There is no guarantee that the data you send will appear on the network immediately. Para aumentar a eficiência da rede, o sistema subjacente pode atrasar a transmissão até que uma quantidade significativa de dados de saída seja coletada.To increase network efficiency, the underlying system may delay transmission until a significant amount of outgoing data is collected. Uma conclusão bem-sucedida do SendFile método significa que o sistema subjacente tinha espaço para armazenar em buffer os dados de um envio de rede.A successful completion of the SendFile method means that the underlying system has had room to buffer your data for a network send.

Observação

Se você receber um SocketException , use a SocketException.ErrorCode propriedade para obter o código de erro específico.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. Depois de obter esse código, consulte a documentação do código de erro da API do Windows Sockets versão 2 para obter uma descrição detalhada do erro.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Observação

Esse membro emite o rastreamento de informações quando você ativa o rastreamento de rede em seu aplicativo.This member outputs trace information when you enable network tracing in your application. Para obter mais informações, consulte rastreamento de rede na .NET Framework.For more information, see Network Tracing in the .NET Framework.

Aplica-se a