Socket.SendFile Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выполняет синхронную передачу файла и дополнительных данных на подключенный объект Socket.
Перегрузки
SendFile(String) |
Отправляет файл |
SendFile(String, Byte[], Byte[], TransmitFileOptions) |
Отправляет файл |
SendFile(String, ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, TransmitFileOptions) |
Отправляет файл |
SendFile(String)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Отправляет файл 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 ("\\shared directory\\myfile.txt"). Если файл не найден, возникает исключение FileNotFoundException .
Этот метод использует функцию TransmitFile
, найденную в API Сокетов Windows 2. Дополнительные сведения о TransmitFile
функции и ее флагах см. в документации по сокетам Windows .
SendFile синхронно отправляет файл на удаленный узел, указанный в методе Connect или Accept . SendFile может использоваться как для протоколов, ориентированных на подключение, так и для протоколов без подключения.
Если вы используете протокол без подключения, необходимо вызвать Connect перед вызовом этого метода, в противном случае SendFile вызывается SocketException исключение. Если вы используете протокол, ориентированный на подключение, необходимо использовать Connect для установки подключения к удаленному узлу или использовать для Accept принятия входящего подключения.
Если вы используете протокол, ориентированный на подключение, блокируется до SendFile отправки файла. В неблокировке SendFile может завершиться до отправки всего файла. Нет никакой гарантии, что отправляемые данные будут отображаться в сети немедленно. Чтобы повысить эффективность сети, базовая система может отложить передачу, пока не будет собран значительный объем исходящих данных. Успешное завершение SendFile метода означает, что в базовой системе есть место для буферизации данных для отправки по сети.
Примечание
Если вы получаете SocketException, используйте SocketException.ErrorCode свойство , чтобы получить конкретный код ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API сокетов Windows версии 2 , чтобы получить подробное описание ошибки.
Примечание
Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в статье Трассировка сети в платформа .NET Framework.
Применяется к
SendFile(String, Byte[], Byte[], TransmitFileOptions)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Отправляет файл 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" находится в корневом каталоге локального компьютера. В этом примере мы создадим пребуфер и постбуфер данных и отправим их на удаленный узел с файлом . Используются значения по умолчанию 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 ("\\shared directory\\myfile.txt").
Параметр flags
предоставляет поставщику службы Window Sockets дополнительные сведения о передаче файлов. Дополнительные сведения об использовании этого параметра см. в разделе TransmitFileOptions.
Этот метод использует функцию TransmitFile
, найденную в API Сокетов Windows 2. Дополнительные сведения о TransmitFile
функции и ее флагах см. в документации по сокетам Windows .
SendFile синхронно отправляет файл на удаленный узел, указанный в методе Connect или Accept . SendFile может использоваться как для протоколов, ориентированных на подключение, так и для протоколов без подключения.
Если вы используете протокол без подключения, необходимо вызвать Connect перед вызовом SocketExceptionэтого метода; в противном случае SendFile вызывает исключение . Если вы используете протокол, ориентированный на подключение, необходимо либо использовать для Connect установки подключения к удаленному узлу, либо использовать для Accept принятия входящего подключения.
Если вы используете протокол, ориентированный на подключение, блокируется, SendFile пока не будет отправлен весь файл. В неблокировке SendFile может завершиться до отправки всего файла. Нет никакой гарантии, что отправляемые данные будут отображаться в сети немедленно. Чтобы повысить эффективность сети, базовая система может отложить передачу, пока не будет собран значительный объем исходящих данных. Успешное завершение SendFile метода означает, что в базовой системе есть место для буферизации данных для отправки по сети.
Примечание
Если вы получаете SocketException, используйте SocketException.ErrorCode свойство , чтобы получить конкретный код ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API сокетов Windows версии 2 , чтобы получить подробное описание ошибки.
Примечание
Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в статье Трассировка сети в платформа .NET Framework.
Применяется к
SendFile(String, ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, TransmitFileOptions)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Отправляет файл 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
не найден.
Произошла ошибка при попытке доступа к сокету.