Поделиться через


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)

Исходный код:
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 не найден.

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

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