TransmitFileOptions Enumeration
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Die TransmitFileOptions-Enumeration definiert Werte, die in Dateiübertragungsanforderungen verwendet werden.
Diese Enumeration unterstützt eine bitweise Kombination ihrer Memberwerte.
public enum class TransmitFileOptions
[System.Flags]
public enum TransmitFileOptions
[<System.Flags>]
type TransmitFileOptions =
Public Enum TransmitFileOptions
- Vererbung
- Attribute
Felder
Disconnect | 1 | Beginnt, die Verbindung auf Transportebene zu trennen, nachdem alle Dateidaten in die Übertragungswarteschlange gestellt wurden. Bei Verwendung mit ReuseSocket setzen diese Flags den Socket in einen getrennten, wiederverwendbaren Zustand zurück, nachdem die Datei übertragen wurde. |
ReuseSocket | 2 | Das Sockethandle kann nach Abschluss der Anforderung wiederverwendet werden. Dieses Flag ist nur gültig, wenn auch Disconnect angegeben wird. Bei Verwendung mit Disconnect setzen diese Flags den Socket in einen getrennten, wiederverwendbaren Zustand zurück, nachdem die Datei übertragen wurde. |
UseDefaultWorkerThread | 0 | Verwendet den Standardthread, um umfangreiche Dateiübertragungsanforderungen zu verarbeiten. |
UseKernelApc | 32 | Verwendet zum Verarbeiten umfangreicher Dateiübertragungsanforderungen Kernel-APCs (Asynchronous Procedure Calls, asynchrone Prozeduraufrufe) anstelle von Arbeitsthreads. Umfangreiche Anforderungen sind als Anforderungen definiert, die mehrere Lesevorgänge aus der Datei oder einem Cache erfordern. Die Anforderung hängt daher von der Dateigröße und der angegebenen Länge des zu sendenden Pakets ab. |
UseSystemThread | 16 | Verwendet Systemthreads, um umfangreiche Dateiübertragungsanforderungen zu verarbeiten. |
WriteBehind | 4 | Führt die Dateiübertragungsanforderung unverzüglich aus. Wenn dieses Flag angegeben und die Dateiübertragung erfolgreich ausgeführt wurde, wurden die Daten vom System akzeptiert, jedoch nicht unbedingt durch die Remoteseite bestätigt. Verwenden Sie dieses Flag nicht zusammen mit dem Disconnect-Flag und dem ReuseSocket-Flag. |
Beispiele
Im folgenden Beispiel wird die Verwendung von in einem Aufruf von TransmitFileOptions
Socket.SendFileveranschaulicht. Die Datei "test.txt" befindet sich im Stammverzeichnis des lokalen Computers. In diesem Beispiel werden ein Prebuffer und ein Postbuffer von Daten erstellt und mit der Datei an den Remotehost gesendet. Um den Standardthread des Systems zu verwenden, UseDefaultWorkerThread
wird angegeben.
// 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();
Hinweise
Hinweis
Die Flags und ReuseSocket
versetzen den Socket in einen getrenntenDisconnect
, wiederverwendbaren Zustand zurück, nachdem die Datei übertragen wurde. Diese Flags sollten nicht für einen Socket verwendet werden, in dem QOS (Quality of Service, Quality of Service) angefordert wurde, da der Dienstanbieter alle mit dem Socket verknüpften Dienstqualitäten sofort löschen kann, bevor die Dateiübertragung abgeschlossen ist. Der beste Ansatz für einen QOS-fähigen Socket besteht darin, nach Abschluss der Dateiübertragung aufzurufen Socket.Close , anstatt sich auf diese Flags zu verlassen.