TransmitFileOptions Výčet

Definice

Výčet TransmitFileOptions definuje hodnoty používané v požadavcích na přenos souborů.

Tento výčet podporuje bitové kombinace hodnot jeho členů.

public enum class TransmitFileOptions
[System.Flags]
public enum TransmitFileOptions
[<System.Flags>]
type TransmitFileOptions = 
Public Enum TransmitFileOptions
Dědičnost
TransmitFileOptions
Atributy

Pole

Disconnect 1

Jakmile jsou všechna data souboru zařazena do fronty pro přenos, spusťte odpojení na úrovni přenosu. Při použití s ReuseSocket, vrátí tyto příznaky soket do odpojeného a opakovaně použitelného stavu po přenosu souboru.

ReuseSocket 2

Popisovač soketu může být po dokončení požadavku znovu použit. Tento příznak je platný pouze v případě, že Disconnect je také zadán. Při použití s Disconnect, vrátí tyto příznaky soket do odpojeného a opakovaně použitelného stavu po přenosu souboru.

UseDefaultWorkerThread 0

Pomocí výchozího vlákna můžete zpracovávat žádosti o dlouhý přenos souborů.

UseKernelApc 32

K zpracování požadavků na přenos souborů s dlouhými přenosy souborů používejte místo pracovních vláken asynchronní volání procedur jádra (APC). Dlouhé požadavky jsou definovány jako požadavky, které vyžadují více než jedno čtení ze souboru nebo mezipaměti. požadavek proto závisí na velikosti souboru a zadané délce odesílaného paketu.

UseSystemThread 16

Pomocí systémových vláken můžete zpracovávat dlouhé žádosti o přenos souborů.

WriteBehind 4

Dokončete žádost o přenos souborů okamžitě bez čekání. Pokud je tento příznak zadán a přenos souboru bude úspěšný, byla data přijata systémem, ale vzdálený konec je nemusí nutně potvrdit. Nepoužívejte tento příznak s Disconnect příznaky a ReuseSocket .

Příklady

Následující příklad ukazuje použití při TransmitFileOptions volání .Socket.SendFile Soubor "test.txt" se nachází v kořenovém adresáři místního počítače. V tomto příkladu se vytvoří prebuffer a postbuffer dat a odešle se na vzdáleného hostitele se souborem. Pokud chcete použít výchozí vlákno systému, UseDefaultWorkerThread je zadáno.

// 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();

Poznámky

Poznámka

Označí Disconnect a ReuseSocket vrátí soket do odpojeného a opakovaně použitelného stavu po odeslání souboru. Tyto příznaky by se neměly používat na soketu, kde je požadována technologie QOS (Quality of Service), protože poskytovatel služeb může okamžitě odstranit kvalitu služby přidružené k soketu před dokončením přenosu souboru. Nejlepší přístup pro soket s podporou QOS je volat Socket.Close po dokončení přenosu souboru, a nespoléhat se na tyto příznaky.

Platí pro