TransmitFileOptions Enumeración
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
La enumeración TransmitFileOptions define valores utilizados en solicitudes de transferencia de archivos.
Esta enumeración admite una combinación bit a bit de sus valores de miembro.
public enum class TransmitFileOptions
[System.Flags]
public enum TransmitFileOptions
[<System.Flags>]
type TransmitFileOptions =
Public Enum TransmitFileOptions
- Herencia
- Atributos
Campos
Disconnect | 1 | Inicia una desconexión de nivel de transporte después de que todos los datos de archivos se han colocado en la cola para la transmisión. Cuando se utiliza con ReuseSocket, estos marcadores devuelven el socket a un estado desconectado y reutilizable después de que se ha transmitido el archivo. |
ReuseSocket | 2 | Se puede reutilizar el identificador del socket cuando la solicitud finaliza. Este marcador sólo es válido si también se especifica Disconnect. Cuando se utiliza con Disconnect, estos marcadores devuelven el socket a un estado desconectado y reutilizable después de que se ha transmitido el archivo. |
UseDefaultWorkerThread | 0 | Utilice el subproceso predeterminado para procesar las solicitudes de transferencia de archivos largas. |
UseKernelApc | 32 | Utilice llamadas a procedimientos asincrónicos (APC) del kernel, en lugar de subprocesos de trabajo, para procesar las solicitudes largas de transferencia de archivos. Las solicitudes largas se definen como solicitudes que requieren más de una lectura del archivo o de una caché; la solicitud depende, por tanto, del tamaño del archivo y de la longitud especificada del paquete de envío. |
UseSystemThread | 16 | Utilice el subproceso del sistema para procesar las solicitudes largas de transferencia de archivos. |
WriteBehind | 4 | Finaliza la solicitud de la transferencia de archivos de forma inmediata y completa. Si se especifica este marcador y la transferencia de archivos se realiza, el sistema ha aceptado los datos pero no han sido necesariamente confirmados por el fin remoto. No utilice este marcador con marcadores Disconnect y ReuseSocket. |
Ejemplos
En el ejemplo siguiente se muestra el uso de TransmitFileOptions
en una llamada a Socket.SendFile. El archivo "test.txt" se encuentra en el directorio raíz del equipo local. En este ejemplo, se crea un búfer previo y un postbuffer de datos y se envían al host remoto con el archivo . Para usar el subproceso predeterminado del sistema, UseDefaultWorkerThread
se especifica .
// 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();
Comentarios
Nota
Las marcas Disconnect
y ReuseSocket
devuelven el socket a un estado desconectado y reutilizable después de que se haya transmitido el archivo. Estas marcas no deben usarse en un socket en el que se haya solicitado calidad de servicio (QOS), ya que el proveedor de servicios podría eliminar inmediatamente cualquier calidad de servicio asociada al socket antes de que se haya completado la transferencia de archivos. El mejor enfoque para un socket habilitado para QOS es llamar Socket.Close a cuando se haya completado la transferencia de archivos, en lugar de confiar en estas marcas.