TransmitFileOptions Enumeração

Definição

A enumeração TransmitFileOptions define os valores usados nas solicitações de transferência de arquivo.The TransmitFileOptions enumeration defines values used in file transfer requests.

Esta enumeração tem um atributo FlagsAttribute que permite uma combinação bit a bit dos valores membros dela.

public enum class TransmitFileOptions
[System.Flags]
public enum TransmitFileOptions
[<System.Flags>]
type TransmitFileOptions = 
Public Enum TransmitFileOptions
Herança
TransmitFileOptions
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.Start a transport-level disconnect after all the file data has been queued for transmission. 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.When used with ReuseSocket, these flags return the socket to a disconnected, reusable state after the file has been transmitted.

ReuseSocket 2

O identificador de soquete poderá ser reutilizado quando a solicitação for concluída.The socket handle may be reused when the request completes. Esse sinalizador apenas será válido se Disconnect também for especificado.This flag is valid only if Disconnect is also specified. 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.When used with Disconnect, these flags return the socket to a disconnected, reusable state after the file has been transmitted.

UseDefaultWorkerThread 0

Use o thread padrão para processar solicitações de transferência de arquivo longas.Use the default thread to process long file transfer requests.

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.Use kernel asynchronous procedure calls (APCs) instead of worker threads to process long file transfer requests. 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.Long requests are defined as requests that require more than a single read from the file or a cache; the request therefore depends on the size of the file and the specified length of the send packet.

UseSystemThread 16

Use threads do sistema para processar solicitações de transferência de arquivo longas.Use system threads to process long file transfer requests.

WriteBehind 4

Conclua a solicitação de transferência de arquivo imediatamente, sem pendência.Complete the file transfer request immediately, without pending. 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.If this flag is specified and the file transfer succeeds, the data has been accepted by the system but not necessarily acknowledged by the remote end. Não use esse sinalizador com os sinalizadores Disconnect e ReuseSocket.Do not use this flag with the Disconnect and ReuseSocket flags.

Exemplos

O exemplo a seguir demonstra o uso de TransmitFileOptions em uma chamada para Socket.SendFile .The following example demonstrates the use of TransmitFileOptions in a call to Socket.SendFile. 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, um buffer e um buffer de dados são criados e enviados para o host remoto com o arquivo.In this example, a prebuffer and postbuffer of data are created and sent to the remote host with the file. Para usar o thread padrão do sistema, UseDefaultWorkerThread é especificado.To use the system's default thread, UseDefaultWorkerThread is specified.

// 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 depois que o arquivo é transmitido.The flags Disconnect and ReuseSocket return the socket to a disconnected, reusable state after the file has been transmitted. Esses sinalizadores não devem ser usados em um soquete em que a QOS (qualidade de serviço) 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 arquivos.These flags should not be used on a socket where quality of service (QOS) has been requested, because the service provider might immediately delete any quality of service associated with the socket before the file transfer has completed. A melhor abordagem para um soquete habilitado para QOS é chamar Socket.Close quando a transferência de arquivo foi concluída, em vez de depender desses sinalizadores.The best approach for a QOS-enabled socket is to call Socket.Close when the file transfer has completed, rather than relying on these flags.

Aplica-se a