Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

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)

public IAsyncResult BeginSendFile (
	string fileName,
	byte[] preBuffer,
	byte[] postBuffer,
	TransmitFileOptions flags,
	AsyncCallback callback,
	Object state
)
public IAsyncResult BeginSendFile (
	String fileName, 
	byte[] preBuffer, 
	byte[] postBuffer, 
	TransmitFileOptions flags, 
	AsyncCallback callback, 
	Object state
)
public function BeginSendFile (
	fileName : String, 
	preBuffer : byte[], 
	postBuffer : byte[], 
	flags : TransmitFileOptions, 
	callback : AsyncCallback, 
	state : Object
) : IAsyncResult
Nicht zutreffend.

Parameter

fileName

Eine Zeichenfolge, die den Pfad und Namen der zu sendenden Datei enthält. Dieser Parameter kann NULL-Verweis (Nothing in Visual Basic) sein.

preBuffer

Ein Byte-Array, das Daten enthält, die vor dem Senden der Datei gesendet werden sollen. Dieser Parameter kann NULL-Verweis (Nothing in Visual Basic) sein.

postBuffer

Ein Byte-Array, das Daten enthält, die nach dem Senden der Datei gesendet werden sollen. Dieser Parameter kann NULL-Verweis (Nothing in Visual Basic) sein.

flags

Eine bitweise Kombination von TransmitFileOptions-Werten.

callback

Ein AsyncCallback-Delegat, der nach Abschluss dieses Vorgangs aufgerufen werden soll. Dieser Parameter kann NULL-Verweis (Nothing in Visual Basic) sein.

state

Ein benutzerdefiniertes Objekt mit Zustandsinformationen für diese Anforderung. Dieser Parameter kann NULL-Verweis (Nothing in Visual Basic) sein.

Rückgabewert

Ein IAsyncResult-Objekt, das den asynchronen Vorgang darstellt.

AusnahmetypBedingung

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 die Daten, die nach der Datei gesendet werden 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 an den Remotehost, der in den Methoden Connect, BeginConnect, Accept oder BeginAccept festgelegt wurde. BeginSendFile löst eine Ausnahme aus, wenn nicht zunächst Accept, BeginAccept, Connect oder BeginConnect aufgerufen wurde. 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.

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

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 = (IPAddress)ipHostInfo.get_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.get_NewLine());
    ubyte preBuf[] = Encoding.get_ASCII().GetBytes(string1);
    // Create the postBuffer data.
    String string2 = String.Format("This is text data that will follow "
        + "the file.{0}", Environment.get_NewLine());
    ubyte postBuf[] = Encoding.get_ASCII().GetBytes(string2);
    // There is a file test.txt in the root directory.
    String fileName = "C:\\test.txt";
    //Send file fileName with buffer and default flags to the remote device.
    Console.WriteLine(fileName);
    client.BeginSendFile(fileName, preBuf, postBuf, 
        (TransmitFileOptions)0, 
        new AsyncCallback(AsynchronousFileSendCallback), client);
    // Release the socket.
    client.Shutdown(SocketShutdown.Both);
    client.Close();
} //AsynchronousFileSendWithBuffers

private static void AsynchronousFileSendCallback(IAsyncResult ar)
{
    // Retrieve the socket from the state object.
    Socket client = (Socket)ar.get_AsyncState();
    // Complete sending the data to the remote device.
    client.EndSendFile(ar);
    sendDone.Set();
} //AsynchronousFileSendCallback

Windows 98, Windows Server 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

Microsoft .NET Framework 3.0 wird unter Windows Vista, Microsoft Windows XP SP2 und Windows Server 2003 SP1 unterstützt.

.NET Framework

Unterstützt in: 3.0, 2.0
Anzeigen: