Socket.SendFile Socket.SendFile Socket.SendFile Socket.SendFile Method

Definición

Envía, de forma sincrónica, un archivo y datos opcionales a un objeto Socket conectado.Sends a file and optional data synchronously to a connected Socket.

Sobrecargas

SendFile(String) SendFile(String) SendFile(String) SendFile(String)

Envía el archivo fileName a un objeto Socket conectado con el marcador de transmisión UseDefaultWorkerThread.Sends the file fileName to a connected Socket object with the UseDefaultWorkerThread transmit flag.

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

Envía el archivo fileName y búferes de datos a un objeto Socket conectado mediante el valor TransmitFileOptions especificado.Sends the file fileName and buffers of data to a connected Socket object using the specified TransmitFileOptions value.

SendFile(String) SendFile(String) SendFile(String) SendFile(String)

Envía el archivo fileName a un objeto Socket conectado con el marcador de transmisión 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 String String String

String que contiene la ruta de acceso y el nombre del archivo que se va a enviar.A String that contains the path and name of the file to be sent. Este parámetro puede ser null.This parameter can be null.

Excepciones

El socket no está conectado a un host remoto.The socket is not connected to a remote host.

El objeto Socket no está en modo de bloqueo y no puede aceptar esta llamada sincrónica.The Socket object is not in blocking mode and cannot accept this synchronous call.

No se encontró el archivo fileName.The file fileName was not found.

Error al intentar acceder al socket.An error occurred when attempting to access the socket.

Ejemplos

En el ejemplo de código siguiente se crea y se conecta un socket y, a continuación, se envía un archivo al host remoto.The following code example creates and connects a socket and then sends a file to the remote host. El archivo "test. txt" se encuentra en el directorio raíz del equipo 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();

Comentarios

Esta sobrecarga envía el archivo fileName al socket conectado.This overload sends the file fileName to the connected socket. El flags parámetro tiene como valor UseDefaultWorkerThread predeterminado (0) y nulllos preBuffer parámetros postBuffer y tienen como valor predeterminado.The flags parameter defaults to UseDefaultWorkerThread (0), and the preBuffer and postBuffer parameters default to null. Si fileName está en el directorio local, se puede identificar solo con el nombre del archivo; de lo contrario, se debe especificar la ruta de acceso completa y el nombre del archivo.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 comodín (".. \\\\\myfile.txt ") y los nombres de los recursos compartidos UNC (" \shared Directory \myfile.txt "). \Wildcards ("..\\myfile.txt") and UNC share names ("\\\\shared directory\\myfile.txt") are supported. Si no se encuentra el archivo, se produce FileNotFoundException la excepción.If the file is not found, the exception FileNotFoundException is thrown.

Este método usa la TransmitFile función que se encuentra en la API de Windows Sockets 2.This method uses the TransmitFile function found in the Windows Sockets 2 API. Para obtener más información acerca TransmitFile de la función y sus marcas, consulte la documentación de Windows Sockets .For more information about the TransmitFile function and its flags, see the Windows Sockets documentation.

SendFileenvía sincrónicamente un archivo al host remoto especificado en Connect el Accept método o.SendFile synchronously sends a file to the remote host specified in the Connect or Accept method. SendFilese puede usar tanto para los protocolos orientados a la conexión como para los que no tienen conexión.SendFile can be used for both connection-oriented and for connectionless protocols.

Si utiliza un protocolo sin conexión, debe llamar a Connect antes de llamar a este método; de lo contrario SendFile , SocketException inicia una excepción.If you are using a connectionless protocol, you must call Connect before calling this method, otherwise SendFile throws a SocketException exception. Si utiliza un protocolo orientado a la conexión, debe usar Connect para establecer una conexión de host remoto Accept o para aceptar una conexión entrante.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.

Si utiliza un protocolo orientado a la conexión, SendFile se bloquea hasta que se envía el archivo.If you are using a connection-oriented protocol, SendFile blocks until the file is sent. En modo de no bloqueo, SendFile puede completarse correctamente antes de que se haya enviado todo el archivo.In nonblocking mode, SendFile may complete successfully before the entire file has been sent. No hay ninguna garantía de que los datos que envíe aparecerán inmediatamente en la red.There is no guarantee that the data you send will appear on the network immediately. Para aumentar la eficacia de la red, el sistema subyacente puede retrasar la transmisión hasta que se recopile una cantidad significativa de datos salientes.To increase network efficiency, the underlying system may delay transmission until a significant amount of outgoing data is collected. Una finalización correcta del SendFile método significa que el sistema subyacente tiene espacio para almacenar en búfer los datos para un envío de red.A successful completion of the SendFile method means that the underlying system has had room to buffer your data for a network send.

Nota

Si recibe un SocketException, utilice la SocketException.ErrorCode propiedad para obtener el código de error específico.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. Después de obtener este código, consulte la documentación del código de error de la API de Windows Sockets versión 2 para obtener una descripción detallada del error.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Nota

Este miembro genera información de seguimiento cuando se habilita el seguimiento de red en la aplicación.This member outputs trace information when you enable network tracing in your application. Para obtener más información, consulte seguimiento de red en el .NET Framework.For more information, see Network Tracing in the .NET Framework.

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

Envía el archivo fileName y búferes de datos a un objeto Socket conectado mediante el 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);
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 String String String

String que contiene la ruta de acceso y el nombre del archivo que se va a enviar.A String that contains the path and name of the file to be sent. Este parámetro puede ser null.This parameter can be null.

preBuffer
Byte[]

Una matriz Byte que contiene los datos que se van a enviar antes de enviar el archivo.A Byte array that contains data to be sent before the file is sent. Este parámetro puede ser null.This parameter can be null.

postBuffer
Byte[]

Una matriz Byte que contiene los datos que se van a enviar después de enviar el archivo.A Byte array that contains data to be sent after the file is sent. Este parámetro puede ser null.This parameter can be null.

Excepciones

El sistema operativo no es Windows NT o una versión posterior.The operating system is not Windows NT or later.

o bien-or-

El socket no está conectado a un host remoto.The socket is not connected to a remote host.

El objeto Socket no está en modo de bloqueo y no puede aceptar esta llamada sincrónica.The Socket object is not in blocking mode and cannot accept this synchronous call.

No se encontró el archivo fileName.The file fileName was not found.

Error al intentar acceder al socket.An error occurred when attempting to access the socket.

Ejemplos

En el ejemplo de código siguiente se crea y se conecta un socket.The following code example creates and connects a socket. El archivo "test. txt" se encuentra en el directorio raíz del equipo local.The file "test.txt" is located in the root directory of the local machine. En este ejemplo, se crea un búfer y un postbúfer de datos y se envían al host remoto con el archivo.In this example, we create a prebuffer and postbuffer of data and send them to the remote host with the file. Se usa TransmitFileOptions el valor predeterminado.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();

Comentarios

Esta sobrecarga requiere el nombre del archivo que desea enviar y una combinación bit a bit de TransmitFileOptions los valores.This overload requires the name of the file you want to send and a bitwise combination of TransmitFileOptions values. El preBuffer parámetro contiene los datos que desea que precedan al archivo.The preBuffer parameter contains any data you want to precede the file. postBuffercontiene los datos que desea seguir con el archivo.postBuffer contains data you want to follow the file. Si fileName está en el directorio de trabajo actual, puede identificarse solo con el nombre del archivo; de lo contrario, se debe especificar la ruta de acceso completa y el nombre del archivo.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 comodín (".. \\\\\myfile.txt ") y los nombres de los recursos compartidos UNC (" \shared Directory \myfile.txt "). \Wildcards ("..\\myfile.txt") and UNC share names ("\\\\shared directory\\myfile.txt") are supported.

El flags parámetro proporciona al proveedor de servicios de Windows Sockets información adicional sobre la transferencia de archivos.The flags parameter provides the Window Sockets service provider with additional information about the file transfer. Para obtener más información sobre cómo usar este parámetro, vea TransmitFileOptions.For more information about how to use this parameter, see TransmitFileOptions.

Este método usa la TransmitFile función que se encuentra en la API de Windows Sockets 2.This method uses the TransmitFile function found in the Windows Sockets 2 API. Para obtener más información acerca TransmitFile de la función y sus marcas, consulte la documentación de Windows Sockets .For more information about the TransmitFile function and its flags, see the Windows Sockets documentation.

SendFileenvía sincrónicamente un archivo al host remoto especificado en Connect el Accept método o.SendFile synchronously sends a file to the remote host specified in the Connect or Accept method. SendFilese puede usar tanto para los protocolos orientados a la conexión como para los que no tienen conexión.SendFile can be used for both connection-oriented and for connectionless protocols.

Si utiliza un protocolo sin conexión, debe llamar a Connect antes de llamar a este método; de lo contrario SendFile , SocketExceptionproduce una excepción.If you are using a connectionless protocol, you must call Connect before calling this method; otherwise SendFile throws a SocketException. Si utiliza un protocolo orientado a la conexión, debe usar Connect para establecer una conexión de host remoto, o bien usar Accept para aceptar una conexión entrante.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.

Si utiliza un protocolo orientado a la conexión, SendFile se bloquea hasta que se envía todo el archivo.If you are using a connection-oriented protocol, SendFile blocks until the entire file is sent. En modo de no bloqueo, SendFile puede completarse correctamente antes de que se haya enviado todo el archivo.In nonblocking mode, SendFile may complete successfully before the entire file has been sent. No hay ninguna garantía de que los datos que envíe aparecerán inmediatamente en la red.There is no guarantee that the data you send will appear on the network immediately. Para aumentar la eficacia de la red, el sistema subyacente puede retrasar la transmisión hasta que se recopile una cantidad significativa de datos salientes.To increase network efficiency, the underlying system may delay transmission until a significant amount of outgoing data is collected. Una finalización correcta del SendFile método significa que el sistema subyacente tiene espacio para almacenar en búfer los datos para un envío de red.A successful completion of the SendFile method means that the underlying system has had room to buffer your data for a network send.

Nota

Si recibe un SocketException, utilice la SocketException.ErrorCode propiedad para obtener el código de error específico.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. Después de obtener este código, consulte la documentación del código de error de la API de Windows Sockets versión 2 para obtener una descripción detallada del error.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Nota

Este miembro genera información de seguimiento cuando se habilita el seguimiento de red en la aplicación.This member outputs trace information when you enable network tracing in your application. Para obtener más información, consulte seguimiento de red en el .NET Framework.For more information, see Network Tracing in the .NET Framework.

Se aplica a