Socket.SendFile Método
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í.
Envía, de forma sincrónica, un archivo y datos opcionales a un objeto Socket conectado.
Sobrecargas
SendFile(String) |
Envía el archivo |
SendFile(String, Byte[], Byte[], TransmitFileOptions) |
Envía el archivo |
SendFile(String, ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, TransmitFileOptions) |
Envía el archivo |
SendFile(String)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- Socket.cs
Envía el archivo fileName
a un objeto Socket conectado con el marcador de transmisión UseDefaultWorkerThread.
public:
void SendFile(System::String ^ fileName);
public void SendFile (string fileName);
public void SendFile (string? fileName);
member this.SendFile : string -> unit
Public Sub SendFile (fileName As String)
Parámetros
- fileName
- String
String que contiene la ruta de acceso y el nombre del archivo que se va a enviar. Este parámetro puede ser null
.
Excepciones
El socket no está conectado a un host remoto.
El objeto Socket se ha cerrado.
El objeto Socket no está en modo de bloqueo y no puede aceptar esta llamada sincrónica.
No se encontró el archivo fileName
.
Error al intentar acceder al 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. El archivo "test.txt" se encuentra en el directorio raíz del equipo local.
// 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. El flags
parámetro tiene UseDefaultWorkerThread como valor predeterminado (0) y los preBuffer
parámetros y postBuffer
tienen como valor predeterminado null
. Si fileName
está en el directorio local, se puede identificar con solo el nombre del archivo; de lo contrario, se debe especificar la ruta de acceso completa y el nombre del archivo. Caracteres comodín (".. \\myfile.txt") y nombres de recurso compartido UNC ("\\\\shared directory\\myfile.txt") son compatibles. Si no se encuentra el archivo, se produce la excepción FileNotFoundException .
Este método usa la TransmitFile
función que se encuentra en la API de Windows Sockets 2. Para obtener más información sobre la TransmitFile
función y sus marcas, consulte la documentación de Windows Sockets .
SendFile envía de forma sincrónica un archivo al host remoto especificado en el Connect método o Accept . SendFile se puede usar tanto para la conexión como para los protocolos sin conexión.
Si usa un protocolo sin conexión, debe llamar Connect a antes de llamar a este método; de lo contrario SendFile , produce una SocketException excepción. Si usa un protocolo orientado a la conexión, debe usar Connect para establecer una conexión de host remota o usar Accept para aceptar una conexión entrante.
Si usa un protocolo orientado a la conexión, SendFile se bloquea hasta que se envía el archivo. En el modo de no bloqueo, SendFile puede completarse correctamente antes de que se haya enviado todo el archivo. No hay ninguna garantía de que los datos que envíe aparecerán en la red inmediatamente. Para aumentar la eficiencia de la red, el sistema subyacente puede retrasar la transmisión hasta que se recopile una cantidad significativa de datos salientes. Una finalización correcta del SendFile método significa que el sistema subyacente ha tenido espacio para almacenar en búfer los datos de un envío de red.
Nota
Si recibe un SocketException, use la SocketException.ErrorCode propiedad para obtener el código de error específico. 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.
Nota
Este miembro genera información de seguimiento cuando se habilita el seguimiento de red en la aplicación. Para obtener más información, vea Seguimiento de red en .NET Framework.
Se aplica a
SendFile(String, Byte[], Byte[], TransmitFileOptions)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- Socket.cs
Envía el archivo fileName
y búferes de datos a un objeto Socket conectado mediante el valor TransmitFileOptions especificado.
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);
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
Ruta de acceso y nombre del archivo que se va a enviar. Este parámetro puede ser null
.
- preBuffer
- Byte[]
Los datos que se enviarán antes de enviar el archivo. Este parámetro puede ser null
.
- postBuffer
- Byte[]
Los datos que se enviarán después de enviar el archivo. Este parámetro puede ser null
.
- flags
- TransmitFileOptions
Combinación bit a bit de los valores de enumeración que especifica cómo se transfiere el archivo.
Excepciones
El sistema operativo no es Windows NT o una versión posterior.
o bien
El socket no está conectado a un host remoto.
El objeto Socket se ha cerrado.
El objeto Socket no está en modo de bloqueo y no puede aceptar esta llamada sincrónica.
No se encontró el archivo fileName
.
Error al intentar acceder al socket.
Ejemplos
En el ejemplo de código siguiente se crea y se conecta un socket. El archivo "test.txt" se encuentra en el directorio raíz del equipo local. En este ejemplo, creamos un búfer previo y un postbuffer de datos y los enviamos al host remoto con el archivo . Se usa el valor predeterminado TransmitFileOptions .
// 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 valores. El preBuffer
parámetro contiene los datos que desea preceder al archivo.
postBuffer
contiene datos que desea seguir el archivo. Si fileName
está en el directorio de trabajo actual, se puede identificar con solo el nombre del archivo; de lo contrario, se debe especificar la ruta de acceso completa y el nombre del archivo. Caracteres comodín (".. \\myfile.txt") y nombres de recurso compartido UNC ("\\\\shared directory\\myfile.txt") son compatibles.
El flags
parámetro proporciona al proveedor de servicios Sockets de ventana información adicional sobre la transferencia de archivos. Para obtener más información sobre cómo usar este parámetro, vea TransmitFileOptions.
Este método usa la TransmitFile
función que se encuentra en la API de Windows Sockets 2. Para obtener más información sobre la TransmitFile
función y sus marcas, consulte la documentación de Windows Sockets .
SendFile envía de forma sincrónica un archivo al host remoto especificado en el Connect método o Accept . SendFile se puede usar tanto para la conexión como para los protocolos sin conexión.
Si usa un protocolo sin conexión, debe llamar Connect a antes de llamar a este método; de lo contrario SendFile , inicia una SocketExceptionexcepción . Si usa un protocolo orientado a la conexión, debe usar Connect para establecer una conexión de host remota o usar Accept para aceptar una conexión entrante.
Si usa un protocolo orientado a la conexión, SendFile se bloquea hasta que se envíe todo el archivo. En el modo de no bloqueo, SendFile puede completarse correctamente antes de que se haya enviado todo el archivo. No hay ninguna garantía de que los datos que envíe aparecerán en la red inmediatamente. Para aumentar la eficiencia de la red, el sistema subyacente puede retrasar la transmisión hasta que se recopile una cantidad significativa de datos salientes. Una finalización correcta del SendFile método significa que el sistema subyacente ha tenido espacio para almacenar en búfer los datos de un envío de red.
Nota
Si recibe un SocketException, use la SocketException.ErrorCode propiedad para obtener el código de error específico. 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.
Nota
Este miembro genera información de seguimiento cuando se habilita el seguimiento de red en la aplicación. Para obtener más información, vea Seguimiento de red en .NET Framework.
Se aplica a
SendFile(String, ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, TransmitFileOptions)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- Socket.cs
Envía el archivo fileName
y búferes de datos a un objeto Socket conectado mediante el valor TransmitFileOptions especificado.
public:
void SendFile(System::String ^ fileName, ReadOnlySpan<System::Byte> preBuffer, ReadOnlySpan<System::Byte> postBuffer, System::Net::Sockets::TransmitFileOptions flags);
public void SendFile (string? fileName, ReadOnlySpan<byte> preBuffer, ReadOnlySpan<byte> postBuffer, System.Net.Sockets.TransmitFileOptions flags);
member this.SendFile : string * ReadOnlySpan<byte> * ReadOnlySpan<byte> * System.Net.Sockets.TransmitFileOptions -> unit
Public Sub SendFile (fileName As String, preBuffer As ReadOnlySpan(Of Byte), postBuffer As ReadOnlySpan(Of Byte), flags As TransmitFileOptions)
Parámetros
- fileName
- String
String que contiene la ruta de acceso y el nombre del archivo que se va a enviar. Este parámetro puede ser null
.
- preBuffer
- ReadOnlySpan<Byte>
que ReadOnlySpan<T> contiene los datos que se van a enviar antes de enviar el archivo. Este búfer puede estar vacío.
- postBuffer
- ReadOnlySpan<Byte>
que ReadOnlySpan<T> contiene los datos que se van a enviar después de enviar el archivo. Este búfer puede estar vacío.
- flags
- TransmitFileOptions
Uno o varios de los valores TransmitFileOptions.
Excepciones
El objeto Socket se ha cerrado.
El Socket objeto no está conectado a un host remoto.
El objeto Socket no está en modo de bloqueo y no puede aceptar esta llamada sincrónica.
No se encontró el archivo fileName
.
Error al intentar acceder al socket.