TransmitFileOptions Wyliczenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wyliczenie TransmitFileOptions definiuje wartości używane w żądaniach transferu plików.
To wyliczenie obsługuje bitową kombinację jego wartości składowych.
public enum class TransmitFileOptions
[System.Flags]
public enum TransmitFileOptions
[<System.Flags>]
type TransmitFileOptions =
Public Enum TransmitFileOptions
- Dziedziczenie
- Atrybuty
Pola
Disconnect | 1 | Uruchom rozłączenie na poziomie transportu, gdy wszystkie dane plików zostały w kolejce do transmisji. W przypadku użycia z programem ReuseSocketflagi te zwracają gniazdo do odłączonego stanu wielokrotnego użytku po przesłaniu pliku. |
ReuseSocket | 2 | Uchwyt gniazda może zostać ponownie użyty po zakończeniu żądania. Ta flaga jest prawidłowa tylko wtedy, gdy Disconnect jest również określona. W przypadku użycia z programem Disconnectflagi te zwracają gniazdo do odłączonego stanu wielokrotnego użytku po przesłaniu pliku. |
UseDefaultWorkerThread | 0 | Użyj domyślnego wątku do przetwarzania długich żądań transferu plików. |
UseKernelApc | 32 | Użyj asynchronicznych wywołań procedury jądra (APCs) zamiast wątków roboczych do przetwarzania długich żądań transferu plików. Długie żądania są definiowane jako żądania wymagające więcej niż jednego odczytu z pliku lub pamięci podręcznej; w związku z tym żądanie zależy od rozmiaru pliku i określonej długości pakietu wysyłania. |
UseSystemThread | 16 | Używanie wątków systemowych do przetwarzania długich żądań transferu plików. |
WriteBehind | 4 | Natychmiast ukończ żądanie transferu plików bez oczekiwania. Jeśli ta flaga zostanie określona i transfer plików zakończy się powodzeniem, dane zostały zaakceptowane przez system, ale niekoniecznie potwierdzone przez zdalny koniec. Nie używaj tej flagi Disconnect z flagami i ReuseSocket . |
Przykłady
W poniższym przykładzie pokazano użycie TransmitFileOptions
metody w wywołaniu metody Socket.SendFile. Plik "test.txt" znajduje się w katalogu głównym komputera lokalnego. W tym przykładzie tworzona jest prebuffer i postbuffer danych oraz wysyłana do hosta zdalnego za pomocą pliku. Aby użyć domyślnego wątku systemu, UseDefaultWorkerThread
jest określony.
// 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();
Uwagi
Uwaga
Flagi Disconnect
i ReuseSocket
zwracają gniazdo do odłączonego stanu wielokrotnego użytku po przesłaniu pliku. Te flagi nie powinny być używane w gniazdku, w którym zażądano jakości usługi (QOS), ponieważ dostawca usług może natychmiast usunąć wszelkie usługi skojarzone z gniazdem przed zakończeniem transferu plików. Najlepszym rozwiązaniem dla gniazda z obsługą systemu QOS jest wywołanie Socket.Close po zakończeniu transferu plików, zamiast polegać na tych flagach.