Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

Socket.BeginSendFile-Methode (String, Byte[], Byte[], TransmitFileOptions, AsyncCallback, Object)

Sendet eine Datei und Datenpuffer asynchron an ein verbundenes Socket-Objekt.

Namespace:  System.Net.Sockets
Assembly:  System (in System.dll)
[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public IAsyncResult BeginSendFile(
	string fileName,
	byte[] preBuffer,
	byte[] postBuffer,
	TransmitFileOptions flags,
	AsyncCallback callback,
	Object state
)

Parameter

fileName
Typ: System.String
Eine Zeichenfolge, die den Pfad und Namen der zu sendenden Datei enthält. Dieser Parameter kann null sein.
preBuffer
Typ: System.Byte[]
Ein Byte-Array, das Daten enthält, die vor dem Senden der Datei gesendet werden sollen. Dieser Parameter kann null sein.
postBuffer
Typ: System.Byte[]
Ein Byte-Array, das Daten enthält, die nach dem Senden der Datei gesendet werden sollen. Dieser Parameter kann null sein.
flags
Typ: System.Net.Sockets.TransmitFileOptions
Eine bitweise Kombination von TransmitFileOptions-Werten.
callback
Typ: System.AsyncCallback
Ein AsyncCallback-Delegat, der nach Abschluss dieses Vorgangs aufgerufen werden soll. Dieser Parameter kann null sein.
state
Typ: System.Object
Ein benutzerdefiniertes Objekt mit Zustandsinformationen für diese Anforderung. Dieser Parameter kann null sein.

Rückgabewert

Typ: System.IAsyncResult
Ein IAsyncResult-Objekt, das den asynchronen Vorgang darstellt.
AusnahmeBedingung
ObjectDisposedException

Das Socket-Objekt wurde geschlossen.

SocketException

Fehler beim Zugriff auf den Socket. Weitere Informationen finden Sie unten im Abschnitt Hinweise.

NotSupportedException

Das Betriebssystem ist nicht Windows NT oder höher.

- oder -

Der Socket ist mit keinem Remotehost verbunden.

FileNotFoundException

Die Datei fileName wurde nicht gefunden.

Bei dieser Überladung müssen der Name der zu sendenden Datei und eine bitweise Kombination von TransmitFileOptions-Werten vorhanden sein. Der preBuffer-Parameter enthält die Daten, die vor der Datei gesendet werden sollen. postBuffer enthält Daten, die auf die Datei folgen sollen. Wenn sich fileName im lokalen Verzeichnis befindet, kann die Datei lediglich mit dem Dateinamen bezeichnet werden. Andernfalls müssen der vollständige Pfad und der Dateiname angegeben werden. Platzhalter (".. \\meinedatei.txt") und UNC-Freigabenamen ("\\\\freigegebenes Verzeichnis\\meinedatei.txt") werden unterstützt. Wenn die Datei nicht gefunden wird, wird die Ausnahme FileNotFoundException ausgelöst.

Der flags-Parameter stellt dem Window Sockets-Dienstanbieter zusätzliche Informationen über die Dateiübertragung bereit. Weitere Informationen über die Verwendung dieses Parameters finden Sie unter TransmitFileOptions.

Diese Methode verwendet die in der API von Windows Sockets 2 vorhandene TransmitFile-Funktion. Weitere Informationen über die TransmitFile-Funktion und ihre Flags finden Sie in der Windows Sockets-Dokumentation der MSDN Library.

Die BeginSendFile-Methode beginnt einen asynchronen Sendevorgang zum Remotehost, der in einer der folgenden Methoden eingerichtet wurde: Connect, BeginConnect, Accept oder BeginAccept. BeginSendFile löst eine Ausnahme aus, wenn Sie nicht zuerst Accept, BeginAccept, Connect oder BeginConnect aufrufen. Mit einem Aufruf der BeginSendFile-Methode können Sie eine Datei in einem eigenen Ausführungsthread senden.

Um den Vorgang abzuschließen, können Sie eine Rückrufmethode erstellen, die vom AsyncCallback-Delegatparameter aufgerufen wird. Hierzu muss der state-Parameter zumindest das Socket-Objekt enthalten, das für die Kommunikation verwendet wird. Wenn für den Rückruf mehr Informationen benötigt werden, können Sie eine Klasse oder Struktur erstellen, die die Socket-Informationen und die weiteren erforderlichen Informationen enthält. Übergeben Sie eine Instanz dieses benutzerdefinierten Objekts über den state-Parameter an die BeginSendFile-Methode.

Die Rückrufmethode muss die EndSendFile-Methode aufrufen. Bei einem Aufruf von BeginSendFile durch die Anwendung verwendet das System einen eigenen Thread zum Ausführen der angegebenen Rückrufmethode und blockiert EndSendFile, bis der Socket die gesamte Datei sendet oder eine Ausnahme auslöst. Weitere Informationen über das Verfassen von Rückrufmethoden finden Sie unter Beispiel zu Callbacks.

Obwohl BeginSendFile in erster Linie für verbindungsorientierte Protokolle konzipiert ist, ist die Verwendung auch bei verbindungslosen Protokollen möglich. In diesem Fall muss jedoch zuerst durch einen Aufruf der Connect-Methode oder der BeginConnect-Methode ein Standardremotehost eingerichtet werden. Bei verbindungslosen Protokollen müssen Sie außerdem sicherstellen, dass die Größe der Datei nicht die maximale Paketgröße des zugrunde liegenden Dienstanbieters übersteigt. Andernfalls wird das Datagramm nicht gesendet, und BeginSendFile löst eine SocketException-Ausnahme aus.

HinweisHinweis

Wenn Sie eine SocketException-Ausnahme erhalten, können Sie mit der SocketException.ErrorCode-Eigenschaft den spezifischen Fehlercode abrufen. Nachdem Sie diesen Code abgerufen haben, finden Sie in der Dokumentation der MSDN Library zu API-Fehlercodes unter Windows Sockets, Version 2, eine ausführliche Beschreibung des Fehlers.

HinweisHinweis

Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren. Weitere Informationen finden Sie unter Netzwerkablaufverfolgung.

HinweisHinweis

Der Ausführungskontext (der Sicherheitskontext, der Benutzer, dessen Identität verwendet wird, und der Kontext des Aufrufs) wird für die asynchrone Socket-Methode zwischengespeichert. Nach der ersten Verwendung eines bestimmten Kontexts (eine bestimmte asynchrone Socket-Methode, eine bestimmte Socket-Instanz und ein bestimmter Rückruf) führen weitere Verwendungen zu einer besseren Leistung.

HinweisHinweis

Das auf diesen Typ oder Member angewendete HostProtectionAttribute-Attribut besitzt den folgenden Resources-Eigenschaftswert: ExternalThreading. Das HostProtectionAttribute hat keine Auswirkungen auf Desktopanwendungen (die normalerweise durch Doppelklicken auf ein Symbol, Eingeben eines Befehls oder einer URL in einem Browser gestartet werden). Weitere Informationen finden Sie unter der HostProtectionAttribute-Klasse oder unter SQL Server-Programmierung und Hostschutzattribute.

Im folgenden Codebeispiel wird ein Socket für die asynchrone Kommunikation erstellt und verbunden, und die Datei "text.txt" wird asynchron an den Remotehost gesendet. In diesem Beispiel werden ein preBuffer und ein postBuffer mit Daten erstellt, die mit der Datei gesendet werden sollen, und der TransmitFileOptions-Standardwert wird verwendet. Der Rückrufdelegat ruft EndSendFile auf, um die Übertragung abzuschließen.


public static void AsynchronousFileSendWithBuffers()
{
    // Send a file asynchronously to the remote device. Send a buffer before the file and a buffer afterwards.

    // Establish the remote endpoint for the socket.
    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
    IPAddress ipAddress = ipHostInfo.AddressList[0];
    IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);

    // Create a TCP/IP socket.
    Socket client = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream, ProtocolType.Tcp);

    // Connect to the remote endpoint.
    client.BeginConnect(remoteEP, 
        new AsyncCallback(ConnectCallback), client);

    // Wait for connect.
    connectDone.WaitOne();

    // Send a file fileName to the remote device with preBuffer and postBuffer data.
    // 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);

    // There is a file test.txt in the root directory.
    string fileName = "C:\\test.txt";

    //Send file fileName with buffers and default flags to the remote device.
    Console.WriteLine(fileName);
    client.BeginSendFile(fileName, preBuf, postBuf, 0, new AsyncCallback(AsynchronousFileSendCallback), client);

    // Release the socket.
    client.Shutdown(SocketShutdown.Both);
    client.Close();
}


private static void AsynchronousFileSendCallback(IAsyncResult ar)
{
    // Retrieve the socket from the state object.
    Socket client = (Socket) ar.AsyncState;

    // Complete sending the data to the remote device.
    client.EndSendFile(ar);
    sendDone.Set();
}


.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)

Community-Beiträge

HINZUFÜGEN
© 2013 Microsoft. Alle Rechte vorbehalten.