TransmitFileOptions Výčet
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
- 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.