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