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
- Исходный код:
- 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 = 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), а preBufferpostBuffer также параметры по умолчанию null. Если fileName он находится в локальном каталоге, он может быть определен только с именем файла; в противном случае необходимо указать полный путь и имя файла. Подстановочные знаки (".. \\myfile.txt") и имена общих папок UNC ("\\\shared directory\\myfile.txt") поддерживаются. Если файл не найден, создается исключение FileNotFoundException .
Этот метод использует функцию, найденную TransmitFile в API сокетов Windows 2. Дополнительные сведения о TransmitFile функции и его флагах см. в документации по сокетам Windows .
SendFileсинхронно отправляет файл удаленному узлу, указанному в методе или Accept методеConnect. 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
- Исходный код:
- 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" находится в корневом каталоге локального компьютера. В этом примере мы создадим пребуфер и postbuffer данных и отправим их на удаленный узел с файлом. Используется значение по умолчанию TransmitFileOptions .
// 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 предоставляет поставщику служб сокетов окон дополнительные сведения о передаче файлов. Дополнительные сведения об использовании этого параметра см. в разделе TransmitFileOptions.
Этот метод использует функцию, найденную TransmitFile в API сокетов Windows 2. Дополнительные сведения о TransmitFile функции и его флагах см. в документации по сокетам Windows .
SendFileсинхронно отправляет файл удаленному узлу, указанному в методе или Accept методеConnect. SendFile можно использовать как для подключений, так и для протоколов без подключения.
Если вы используете протокол без подключения, необходимо вызвать перед вызовом Connect этого метода; в противном случае SendFile вызывается SocketExceptionисключение. Если вы используете протокол, ориентированный на подключение, необходимо либо установить 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
- Исходный код:
- 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 не найден.
Произошла ошибка при попытке доступа к сокету.