Socket.SendFile Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выполняет синхронную передачу файла и дополнительных данных на подключенный объект Socket.
Перегрузки
SendFile(String) |
Отправляет файл |
SendFile(String, Byte[], Byte[], TransmitFileOptions) |
Отправляет файл |
SendFile(String, ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, 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
не найден.
Произошла ошибка при попытке доступа к сокету.