Socket.SendFile Метод

Определение

Выполняет синхронную передачу файла и дополнительных данных на подключенный объект Socket.

Перегрузки

SendFile(String)

Отправляет файл fileName на подключенный объект Socket, используя флаг передачи UseDefaultWorkerThread.

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

Отправляет файл fileName и буферы данных в подключенный объект Socket, используя указанное значение TransmitFileOptions.

SendFile(String, ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, TransmitFileOptions)

Отправляет файл fileName и буферы данных в подключенный объект Socket, используя указанное значение TransmitFileOptions.

SendFile(String)

Отправляет файл fileName на подключенный объект Socket, используя флаг передачи 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)

Параметры

fileName
String

Параметр типа String, содержащий имя отправляемого файла и путь к нему. Этот параметр может иметь значение null.

Исключения

Сокет не подключен к удаленному узлу.

Объект Socket закрыт.

Объект Socket не находится в режиме блокировки и не может принять этот синхронный вызов.

Файл fileName не найден.

Произошла ошибка при попытке доступа к сокету.

Примеры

В следующем примере кода создается и подключается сокет, а затем отправляется файл на удаленный узел. Файл "test.txt" находится в корневом каталоге локального компьютера.

// 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();

Комментарии

Эта перегрузка отправляет файл fileName в подключенный сокет. Параметр flags по умолчанию — UseDefaultWorkerThread (0), а preBuffer postBuffer параметры — по умолчанию null. Если fileName он находится в локальном каталоге, его можно идентифицировать только с именем файла. В противном случае необходимо указать полный путь и имя файла. Подстановочные знаки ("..\ поддерживаются имена общих папок\myfile.txt") и UNC ("\\\\общий каталог\\myfile.txt"). Если файл не найден, возникает исключение FileNotFoundException .

Этот метод использует функцию, найденную TransmitFile в API Windows Sockets 2. Дополнительные сведения о TransmitFile функции и ее флагах см. в документации по Windows Sockets.

SendFileсинхронно отправляет файл на удаленный узел, указанный в или Accept методеConnect. SendFile можно использовать как для подключений, так и для протоколов без подключения.

Если вы используете протокол без подключения, необходимо вызвать Connect перед вызовом SocketException этого метода, в противном случае SendFile возникнет исключение. Если вы используете протокол, ориентированный на подключение, необходимо Connect либо установить подключение к удаленному узлу, либо использовать для Accept принятия входящего подключения.

Если вы используете протокол, ориентированный на подключение, SendFile блокируется до отправки файла. В режиме SendFile неблокировки может завершиться успешно до отправки всего файла. Нет никакой гарантии, что отправляемые данные будут отображаться в сети немедленно. Чтобы повысить эффективность сети, базовая система может отложить передачу до сбора значительного объема исходящих данных. Успешное завершение SendFile метода означает, что базовая система имела место для буферизации данных для отправки по сети.

Примечание

При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows Sockets версии 2, чтобы получить подробное описание ошибки.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в разделе "Трассировка сети" в платформа .NET Framework.

Применяется к

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

Отправляет файл fileName и буферы данных в подключенный объект Socket, используя указанное значение TransmitFileOptions.

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)

Параметры

fileName
String

Путь и имя отправляемого файла. Этот параметр может иметь значение null.

preBuffer
Byte[]

Данные, отправляемые перед отправкой файла. Этот параметр может иметь значение null.

postBuffer
Byte[]

Данные, отправляемые после отправки файла. Этот параметр может иметь значение null.

flags
TransmitFileOptions

Побитовое сочетание значений перечисления, указывающее способ передачи файла.

Исключения

Операционной системой не является Windows NT или более поздняя версия.

-или-

Сокет не подключен к удаленному узлу.

Объект Socket закрыт.

Объект Socket не находится в режиме блокировки и не может принять этот синхронный вызов.

Файл fileName не найден.

Произошла ошибка при попытке доступа к сокету.

Примеры

В следующем примере кода создается и подключается сокет. Файл "test.txt" находится в корневом каталоге локального компьютера. В этом примере мы создадим prebuffer и postbuffer данных и отправим их на удаленный узел с файлом. Используется значение по умолчанию 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();

Комментарии

Для этой перегрузки требуется имя файла, который требуется отправить, и побитовое сочетание значений TransmitFileOptions . Параметр preBuffer содержит все данные, которые вы хотите предшествовать файлу. postBuffer содержит данные, которые вы хотите следовать за файлом. Если fileName он находится в текущем рабочем каталоге, его можно идентифицировать только с именем файла; в противном случае необходимо указать полный путь и имя файла. Подстановочные знаки ("..\ поддерживаются имена общих папок\myfile.txt") и UNC ("\\\\общий каталог\\myfile.txt").

Параметр flags предоставляет поставщику службы сокетов окон дополнительные сведения о передаче файлов. Дополнительные сведения об использовании этого параметра см. в разделе TransmitFileOptions.

Этот метод использует функцию, найденную TransmitFile в API Windows Sockets 2. Дополнительные сведения о TransmitFile функции и ее флагах см. в документации по Windows Sockets.

SendFileсинхронно отправляет файл на удаленный узел, указанный в или Accept методеConnect. SendFile можно использовать как для подключений, так и для протоколов без подключения.

Если используется протокол без подключения, необходимо вызвать Connect перед вызовом этого метода; в противном случае SendFile вызывается исключение SocketException. Если вы используете протокол, ориентированный на подключение, необходимо Connect либо установить подключение к удаленному узлу, либо принять Accept входящее подключение.

Если вы используете протокол, ориентированный на подключение, SendFile блокируется до отправки всего файла. В режиме SendFile неблокировки может завершиться успешно до отправки всего файла. Нет никакой гарантии, что отправляемые данные будут отображаться в сети немедленно. Чтобы повысить эффективность сети, базовая система может отложить передачу до сбора значительного объема исходящих данных. Успешное завершение SendFile метода означает, что базовая система имела место для буферизации данных для отправки по сети.

Примечание

При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows Sockets версии 2, чтобы получить подробное описание ошибки.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в разделе "Трассировка сети" в платформа .NET Framework.

Применяется к

SendFile(String, ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, TransmitFileOptions)

Отправляет файл fileName и буферы данных в подключенный объект Socket, используя указанное значение TransmitFileOptions.

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)

Параметры

fileName
String

Параметр типа String, содержащий имя отправляемого файла и путь к нему. Этот параметр может иметь значение null.

preBuffer
ReadOnlySpan<Byte>

Объект ReadOnlySpan<T> , содержащий данные, отправляемые перед отправкой файла. Этот буфер может быть пустым.

postBuffer
ReadOnlySpan<Byte>

Объект ReadOnlySpan<T> , содержащий данные, отправляемые после отправки файла. Этот буфер может быть пустым.

flags
TransmitFileOptions

Одно или несколько значений TransmitFileOptions.

Исключения

Объект Socket закрыт.

Объект Socket не подключен к удаленному узлу.

Объект Socket не находится в режиме блокировки и не может принять этот синхронный вызов.

Файл fileName не найден.

Произошла ошибка при попытке доступа к сокету.

Применяется к