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 souborů zařazená do fronty pro přenos, spusťte odpojení na úrovni přenosu. Při použití s ReuseSocketvrá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 Disconnectvrátí tyto příznaky soket do odpojeného a opakovaně použitelného stavu po přenosu souboru.

UseDefaultWorkerThread 0

Ke zpracování dlouhých žádostí o přenos souborů použijte výchozí vlákno.

UseKernelApc 32

Ke zpracování dlouhých požadavků na přenos souborů použijte místo pracovních vláken asynchronní volání procedur jádra (ATC). 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

Ke zpracování dlouhých žádostí o přenos souborů použijte systémová vlákna.

WriteBehind 4

Žádost o přenos souborů dokončete okamžitě, bez čekání na vyřízení. Pokud je tento příznak zadaný a přenos souboru bude úspěšný, systém data přijme, 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í ve 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 do vzdáleného hostitele se souborem . Chcete-li použít výchozí vlákno systému, UseDefaultWorkerThread je zadán.

// 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 přenosu souboru. Tyto příznaky by se neměly používat na soketu, kde se požaduje QOS (Quality of Service), protože poskytovatel služeb může okamžitě odstranit každou kvalitu služby přidruženou 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 souborů, a nespoléhat se na tyto příznaky.

Platí pro