TransmitFileOptions Enumeração
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
A TransmitFileOptions enumeração define valores usados nos pedidos de transferência de ficheiros.
Esta enumeração suporta uma combinação bit-a-bit dos respetivos valores membro.
public enum class TransmitFileOptions
[System.Flags]
public enum TransmitFileOptions
[<System.Flags>]
type TransmitFileOptions =
Public Enum TransmitFileOptions
- Herança
- Atributos
Campos
| Name | Valor | Description |
|---|---|---|
| UseDefaultWorkerThread | 0 | Use o thread padrão para processar pedidos longos de transferência de ficheiros. |
| Disconnect | 1 | Inicie uma desconexão ao nível de transporte depois de todos os dados do ficheiro terem sido enfileirados para transmissão. Quando usados com ReuseSocket, estes flags devolvem o socket a um estado desconectado e reutilizável após o ficheiro ter sido transmitido. |
| ReuseSocket | 2 | A pega do soquete pode ser reutilizada quando o pedido estiver concluído. Esta bandeira só é válida se Disconnect também for especificado. Quando usados com Disconnect, estes flags devolvem o socket a um estado desconectado e reutilizável após o ficheiro ter sido transmitido. |
| WriteBehind | 4 | Preencha imediatamente o pedido de transferência de ficheiros, sem necessidade de ficar pendente. Se esta flag for especificada e a transferência de ficheiros for bem-sucedida, os dados foram aceites pelo sistema mas não necessariamente reconhecidos pela extremidade remota. Não use esta bandeira com as Disconnect bandeiras de e.ReuseSocket |
| UseSystemThread | 16 | Use threads do sistema para processar pedidos longos de transferência de ficheiros. |
| UseKernelApc | 32 | Use chamadas de procedimento assíncrono (APCs) do kernel em vez de threads de trabalho para processar pedidos longos de transferência de ficheiros. Os pedidos longos são definidos como pedidos que requerem mais do que uma única leitura do ficheiro ou de uma cache; O pedido depende, portanto, do tamanho do ficheiro e do comprimento especificado do pacote de envio. |
Exemplos
O exemplo seguinte demonstra o uso de TransmitFileOptions em uma chamada para Socket.SendFile. O ficheiro "test.txt" está localizado na diretório raiz da máquina local. Neste exemplo, são criados um pré-buffer e um pós-buffer de dados que são enviados para o host remoto juntamente com o ficheiro. Para usar o tópico padrão do sistema, UseDefaultWorkerThread está especificado.
// 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();
Observações
Note
Os flags Disconnect e ReuseSocket devolvem o socket a um estado desconectado e reutilizável após a transmissão do ficheiro. Estas bandeiras não devem ser usadas num socket onde foi solicitada qualidade de serviço (QOS), porque o fornecedor de serviço pode eliminar imediatamente qualquer qualidade de serviço associada ao socket antes de a transferência de ficheiros ser concluída. A melhor abordagem para um socket compatível com QOS é chamar Socket.Close quando a transferência de ficheiros estiver concluída, em vez de depender dessas bandeiras.