TransmitFileOptions Enumeração
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
A enumeração TransmitFileOptions define os valores usados nas solicitações de transferência de arquivo.
Essa enumeração dá suporte a uma combinação bit a bit dos valores de membro.
public enum class TransmitFileOptions
[System.Flags]
public enum TransmitFileOptions
[<System.Flags>]
type TransmitFileOptions =
Public Enum TransmitFileOptions
- Herança
- Atributos
Campos
Disconnect | 1 | Inicie uma desconexão de nível de transporte depois que todos os dados do arquivo forem colocados em fila para transmissão. Quando forem usados com ReuseSocket, esses sinalizadores retornarão o soquete para um estado desconectado e reutilizável depois que o arquivo tiver sido transmitido. |
ReuseSocket | 2 | O identificador de soquete poderá ser reutilizado quando a solicitação for concluída. Esse sinalizador apenas será válido se Disconnect também for especificado. Quando forem usados com Disconnect, esses sinalizadores retornarão o soquete para um estado desconectado e reutilizável depois que o arquivo tiver sido transmitido. |
UseDefaultWorkerThread | 0 | Use o thread padrão para processar solicitações de transferência de arquivo longas. |
UseKernelApc | 32 | Use APCs (chamadas de procedimento assíncronas) de kernel em vez de threads de trabalho para processar solicitações de transferência de arquivo longas. Solicitações longas são definidas como solicitações que exigem mais de uma única leitura do arquivo ou de um cache; portanto, a solicitação depende do tamanho do arquivo e do tamanho especificado do pacote de envio. |
UseSystemThread | 16 | Use threads do sistema para processar solicitações de transferência de arquivo longas. |
WriteBehind | 4 | Conclua a solicitação de transferência de arquivo imediatamente, sem pendência. Se esse sinalizador for especificado e a transferência de arquivos for bem-sucedida, isso indica que os dados foram aceitos pelo sistema, mas não necessariamente reconhecidos pela extremidade remota. Não use esse sinalizador com os sinalizadores Disconnect e ReuseSocket. |
Exemplos
O exemplo a seguir demonstra o uso de TransmitFileOptions
em uma chamada para Socket.SendFile. O arquivo "test.txt" está localizado no diretório raiz do computador local. Neste exemplo, um pré-cofre e um postbuffer de dados são criados e enviados para o host remoto com o arquivo . Para usar o thread padrão do sistema, UseDefaultWorkerThread
é especificado.
// 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
Observação
Os sinalizadores Disconnect
e ReuseSocket
retornam o soquete para um estado desconectado e reutilizável após a transmissão do arquivo. Esses sinalizadores não devem ser usados em um soquete em que a qualidade do serviço (QOS) foi solicitada, pois o provedor de serviços pode excluir imediatamente qualquer qualidade de serviço associada ao soquete antes da conclusão da transferência de arquivo. A melhor abordagem para um soquete habilitado para QOS é chamar Socket.Close quando a transferência de arquivo for concluída, em vez de depender desses sinalizadores.