Freigeben über


Socket.SendFile Methode

Definition

Sendet eine Datei und optionale Daten synchron an einen verbundenen Socket.

Überlädt

SendFile(String)

Sendet die Datei fileName mit dem Socket-Übertragungsflag an ein verbundenes UseDefaultWorkerThread-Objekt.

SendFile(String, Byte[], Byte[], TransmitFileOptions)

Sendet die Datei fileName und puffert Daten mit dem angegebenen TransmitFileOptions-Wert in einem verbundenen Socket-Objekt.

SendFile(String, ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, TransmitFileOptions)

Sendet die Datei fileName und puffert Daten mit dem angegebenen TransmitFileOptions-Wert in einem verbundenen Socket-Objekt.

SendFile(String)

Quelle:
Socket.cs
Quelle:
Socket.cs
Quelle:
Socket.cs

Sendet die Datei fileName mit dem Socket-Übertragungsflag an ein verbundenes UseDefaultWorkerThread-Objekt.

public:
 void SendFile(System::String ^ fileName);
public void SendFile (string fileName);
public void SendFile (string? fileName);
member this.SendFile : string -> unit
Public Sub SendFile (fileName As String)

Parameter

fileName
String

Ein String, der den Pfad und Namen der Datei enthält, die gesendet werden soll. Dieser Parameter kann null sein.

Ausnahmen

Der Socket ist nicht mit einem Remotehost verbunden.

Das Socket-Objekt wurde geschlossen.

Das Socket-Objekt ist nicht im Blockierungsmodus und kann diesen synchronen Aufruf nicht annehmen.

Die Datei fileName wurde nicht gefunden.

Fehler beim Versuch, auf den Socket zuzugreifen.

Beispiele

Im folgenden Codebeispiel wird ein Socket erstellt und verbunden und anschließend eine Datei an den Remotehost gesendet. Die Datei "test.txt" befindet sich im Stammverzeichnis des lokalen Computers.

// 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 );

// There is a text file test.txt located in the root directory.
String^ fileName = "C:\\test.txt";

// Send file fileName to remote device
Console::WriteLine( "Sending {0} to the host.", fileName );
client->SendFile( fileName );

// 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);

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

// Send file fileName to remote device
Console.WriteLine("Sending {0} to the host.", fileName);
client.SendFile(fileName);

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

Hinweise

Diese Überladung sendet die Datei fileName an den verbundenen Socket. Der flags Parameter ist standardmäßig auf UseDefaultWorkerThread (0) und die preBuffer Parameter und postBuffer standardmäßig auf nullfestgelegt. Wenn fileName sich im lokalen Verzeichnis befindet, kann es nur mit dem Namen der Datei identifiziert werden. Andernfalls müssen der vollständige Pfad und der Name der Datei angegeben werden. Wildcards (".. \\myfile.txt") und UNC-Freigabenamen ("\\\\shared directory\\myfile.txt") werden unterstützt. Wenn die Datei nicht gefunden wird, wird die Ausnahme FileNotFoundException ausgelöst.

Diese Methode verwendet die TransmitFile Funktion in der Windows Sockets 2-API. Weitere Informationen zur TransmitFile Funktion und ihren Flags finden Sie in der Dokumentation zu Windows Sockets .

SendFile Sendet synchron eine Datei an den Remotehost, der in der Connect -Methode oder Accept angegeben ist. SendFile kann sowohl für verbindungsorientierte als auch für verbindungslose Protokolle verwendet werden.

Wenn Sie ein verbindungsloses Protokoll verwenden, müssen Sie vor dem Aufrufen dieser Methode aufrufen Connect . Andernfalls SendFile wird eine SocketException Ausnahme ausgelöst. Wenn Sie ein verbindungsorientiertes Protokoll verwenden, müssen Sie entweder verwenden Connect , um eine Remotehostverbindung herzustellen, oder verwenden, Accept um eine eingehende Verbindung zu akzeptieren.

Wenn Sie ein verbindungsorientiertes Protokoll verwenden, wird blockiert, SendFile bis die Datei gesendet wird. Im Nichtblockierungsmodus kann erfolgreich abgeschlossen werden, SendFile bevor die gesamte Datei gesendet wurde. Es gibt keine Garantie dafür, dass die von Ihnen gesendeten Daten sofort im Netzwerk angezeigt werden. Um die Netzwerkeffizienz zu erhöhen, kann das zugrunde liegende System die Übertragung verzögern, bis eine erhebliche Menge ausgehender Daten gesammelt wird. Ein erfolgreicher Abschluss der SendFile Methode bedeutet, dass das zugrunde liegende System Platz zum Puffern Ihrer Daten für eine Netzwerksendung hatte.

Hinweis

Wenn Sie erhalten eine SocketException, verwenden die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode zu erhalten. Nachdem Sie diesen Code erhalten haben, finden Sie in der Dokumentation zu Windows Sockets Version 2-API-Fehlercode eine ausführliche Beschreibung des Fehlers.

Hinweis

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

Gilt für:

SendFile(String, Byte[], Byte[], TransmitFileOptions)

Quelle:
Socket.cs
Quelle:
Socket.cs
Quelle:
Socket.cs

Sendet die Datei fileName und puffert Daten mit dem angegebenen TransmitFileOptions-Wert in einem verbundenen Socket-Objekt.

public:
 void SendFile(System::String ^ fileName, cli::array <System::Byte> ^ preBuffer, cli::array <System::Byte> ^ postBuffer, System::Net::Sockets::TransmitFileOptions flags);
public void SendFile (string? fileName, byte[]? preBuffer, byte[]? postBuffer, System.Net.Sockets.TransmitFileOptions flags);
public void SendFile (string fileName, byte[] preBuffer, byte[] postBuffer, System.Net.Sockets.TransmitFileOptions flags);
member this.SendFile : string * byte[] * byte[] * System.Net.Sockets.TransmitFileOptions -> unit
Public Sub SendFile (fileName As String, preBuffer As Byte(), postBuffer As Byte(), flags As TransmitFileOptions)

Parameter

fileName
String

Der Pfad und Name der zu sendenden Datei. Dieser Parameter kann null sein.

preBuffer
Byte[]

Die Daten, die gesendet werden sollen, bevor die Datei gesendet wird. Dieser Parameter kann null sein.

postBuffer
Byte[]

Die Daten, die nach dem Senden der Datei gesendet werden sollen. Dieser Parameter kann null sein.

flags
TransmitFileOptions

Eine bitweise Kombination der Enumerationswerte, die angibt, wie die Datei übertragen wird.

Ausnahmen

Das Betriebssystem ist nicht Windows NT oder höher.

- oder -

Der Socket ist nicht mit einem Remotehost verbunden.

Das Socket-Objekt wurde geschlossen.

Das Socket-Objekt ist nicht im Blockierungsmodus und kann diesen synchronen Aufruf nicht annehmen.

Die Datei fileName wurde nicht gefunden.

Fehler beim Versuch, auf den Socket zuzugreifen.

Beispiele

Im folgenden Codebeispiel wird ein Socket erstellt und verbunden. Die Datei "test.txt" befindet sich im Stammverzeichnis des lokalen Computers. In diesem Beispiel erstellen wir einen Prebuffer und einen Postbuffer von Daten und senden sie mit der Datei an den Remotehost. Die Standardeinstellung TransmitFileOptions wird verwendet.

// 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

Diese Überladung erfordert den Namen der Datei, die Sie senden möchten, und eine bitweise Kombination von TransmitFileOptions Werten. Der preBuffer Parameter enthält alle Daten, die der Datei vorangestellt werden sollen. postBuffer enthält Daten, die Sie der Datei folgen möchten. Wenn fileName sich im aktuellen Arbeitsverzeichnis befindet, kann es nur mit dem Namen der Datei identifiziert werden. Andernfalls müssen der vollständige Pfad und der Name der Datei angegeben werden. Wildcards (".. \\myfile.txt") und UNC-Freigabenamen ("\\\\shared directory\\myfile.txt") werden unterstützt.

Der flags Parameter stellt dem Window Sockets-Dienstanbieter zusätzliche Informationen zur Dateiübertragung bereit. Weitere Informationen zum Verwenden dieses Typs finden Sie unter TransmitFileOptions.

Diese Methode verwendet die TransmitFile Funktion in der Windows Sockets 2-API. Weitere Informationen zur TransmitFile Funktion und ihren Flags finden Sie in der Dokumentation zu Windows Sockets .

SendFile Sendet synchron eine Datei an den Remotehost, der in der Connect -Methode oder Accept angegeben ist. SendFile kann sowohl für verbindungsorientierte als auch für verbindungslose Protokolle verwendet werden.

Wenn Sie ein verbindungsloses Protokoll verwenden, müssen Sie vor dem Aufrufen dieser Methode aufrufen Connect . Andernfalls SendFile wird ausgelöst SocketException. Wenn Sie ein verbindungsorientiertes Protokoll verwenden, müssen Sie entweder verwenden Connect , um eine Remotehostverbindung herzustellen, oder verwenden Accept Sie, um eine eingehende Verbindung zu akzeptieren.

Wenn Sie ein verbindungsorientiertes Protokoll verwenden, wird blockiert, SendFile bis die gesamte Datei gesendet wird. Im Nichtblockierungsmodus kann erfolgreich abgeschlossen werden, SendFile bevor die gesamte Datei gesendet wurde. Es gibt keine Garantie dafür, dass die von Ihnen gesendeten Daten sofort im Netzwerk angezeigt werden. Um die Netzwerkeffizienz zu erhöhen, kann das zugrunde liegende System die Übertragung verzögern, bis eine erhebliche Menge ausgehender Daten gesammelt wird. Ein erfolgreicher Abschluss der SendFile Methode bedeutet, dass das zugrunde liegende System Platz zum Puffern Ihrer Daten für eine Netzwerksendung hatte.

Hinweis

Wenn Sie erhalten eine SocketException, verwenden die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode zu erhalten. Nachdem Sie diesen Code erhalten haben, finden Sie in der Dokumentation zu Windows Sockets Version 2-API-Fehlercode eine ausführliche Beschreibung des Fehlers.

Hinweis

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

Gilt für:

SendFile(String, ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, TransmitFileOptions)

Quelle:
Socket.cs
Quelle:
Socket.cs
Quelle:
Socket.cs

Sendet die Datei fileName und puffert Daten mit dem angegebenen TransmitFileOptions-Wert in einem verbundenen Socket-Objekt.

public:
 void SendFile(System::String ^ fileName, ReadOnlySpan<System::Byte> preBuffer, ReadOnlySpan<System::Byte> postBuffer, System::Net::Sockets::TransmitFileOptions flags);
public void SendFile (string? fileName, ReadOnlySpan<byte> preBuffer, ReadOnlySpan<byte> postBuffer, System.Net.Sockets.TransmitFileOptions flags);
member this.SendFile : string * ReadOnlySpan<byte> * ReadOnlySpan<byte> * System.Net.Sockets.TransmitFileOptions -> unit
Public Sub SendFile (fileName As String, preBuffer As ReadOnlySpan(Of Byte), postBuffer As ReadOnlySpan(Of Byte), flags As TransmitFileOptions)

Parameter

fileName
String

Ein String, der den Pfad und Namen der Datei enthält, die gesendet werden soll. Dieser Parameter kann null sein.

preBuffer
ReadOnlySpan<Byte>

Eine ReadOnlySpan<T> , die Daten enthält, die vor dem Senden der Datei gesendet werden sollen. Dieser Puffer kann leer sein.

postBuffer
ReadOnlySpan<Byte>

Eine ReadOnlySpan<T> , die Daten enthält, die nach dem Senden der Datei gesendet werden sollen. Dieser Puffer kann leer sein.

flags
TransmitFileOptions

Mindestens ein TransmitFileOptions-Wert.

Ausnahmen

Das Socket-Objekt wurde geschlossen.

Das Socket Objekt ist nicht mit einem Remotehost verbunden.

Das Socket-Objekt ist nicht im Blockierungsmodus und kann diesen synchronen Aufruf nicht annehmen.

Die Datei fileName wurde nicht gefunden.

Fehler beim Versuch, auf den Socket zuzugreifen.

Gilt für: