TransmitFileOptions Перечисление
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перечисление TransmitFileOptions определяет значения, используемые в запросах на передачу файлов.
Это перечисление поддерживает побитовую комбинацию значений его членов.
public enum class TransmitFileOptions
[System.Flags]
public enum TransmitFileOptions
[<System.Flags>]
type TransmitFileOptions =
Public Enum TransmitFileOptions
- Наследование
- Атрибуты
Поля
| Имя | Значение | Описание |
|---|---|---|
| UseDefaultWorkerThread | 0 | Используйте поток по умолчанию для обработки длинных запросов на передачу файлов. |
| Disconnect | 1 | Запустите отключение уровня транспорта после того, как все данные файла были помещены в очередь для передачи. При использовании с ReuseSocketэтими флагами эти флаги возвращают сокет в отключенное, повторно используемое состояние после передачи файла. |
| ReuseSocket | 2 | Дескриптор сокета может использоваться повторно при завершении запроса. Этот флаг действителен только в том случае, если Disconnect он также указан. При использовании с Disconnectэтими флагами эти флаги возвращают сокет в отключенное, повторно используемое состояние после передачи файла. |
| WriteBehind | 4 | Немедленно завершите запрос на передачу файлов без ожидания. Если этот флаг указан и передача файлов выполнена успешно, данные были приняты системой, но не обязательно подтверждены удаленным конце. Не используйте этот флаг с Disconnect флагами и ReuseSocket флагами. |
| UseSystemThread | 16 | Используйте системные потоки для обработки длинных запросов на передачу файлов. |
| UseKernelApc | 32 | Используйте вызовы асинхронной процедуры ядра вместо рабочих потоков для обработки длинных запросов на передачу файлов. Длинные запросы определяются как запросы, требующие более одного чтения из файла или кэша; Таким образом, запрос зависит от размера файла и указанной длины пакета отправки. |
Примеры
В следующем примере показано использование TransmitFileOptions в вызове Socket.SendFile. Файл "test.txt" находится в корневом каталоге локального компьютера. В этом примере создается пребаффер и postbuffer данных и отправляется на удаленный узел с файлом. Чтобы использовать поток по умолчанию системы, UseDefaultWorkerThread указывается.
// 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();
Комментарии
Note
Флаги Disconnect и ReuseSocket возврат сокета в отключенное, повторное использование состояния после передачи файла. Эти флаги не следует использовать в сокете, где запрашивается качество обслуживания (QOS), так как поставщик услуг может немедленно удалить любое качество обслуживания, связанное с сокетом, до завершения передачи файлов. Лучший подход к сокету с поддержкой QOS — вызывать Socket.Close при завершении передачи файлов, а не полагаться на эти флаги.