Sdílet prostřednictvím


Socket.SendFile Metoda

Definice

Odešle soubor a volitelná data synchronně do připojeného Socket.

Přetížení

SendFile(String)

Odešle soubor fileName připojenému Socket objektu s příznakem UseDefaultWorkerThread přenosu.

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

Odešle soubor fileName a vyrovnávací paměti dat do připojeného Socket objektu pomocí zadané TransmitFileOptions hodnoty.

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

Odešle soubor fileName a vyrovnávací paměti dat do připojeného Socket objektu pomocí zadané TransmitFileOptions hodnoty.

SendFile(String)

Zdroj:
Socket.cs
Zdroj:
Socket.cs
Zdroj:
Socket.cs

Odešle soubor fileName připojenému Socket objektu s příznakem UseDefaultWorkerThread přenosu.

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)

Parametry

fileName
String

A String obsahující cestu a název souboru, který se má odeslat. Tento parametr může být null.

Výjimky

Soket není připojený ke vzdálenému hostiteli.

Objekt Socket byl uzavřen.

Objekt Socket není v režimu blokování a nemůže přijmout toto synchronní volání.

Soubor fileName nebyl nalezen.

Při pokusu o přístup k soketu došlo k chybě.

Příklady

Následující příklad kódu vytvoří a připojí soket a pak odešle soubor vzdálenému hostiteli. Soubor "test.txt" se nachází v kořenovém adresáři místního počítače.

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

Poznámky

Toto přetížení odešle soubor fileName do připojeného soketu. Parametr flagsUseDefaultWorkerThread výchozí hodnotu (0) a preBuffer parametry a postBuffer výchozí hodnotu null. Pokud fileName je v místním adresáři, může být označen pouze názvem souboru, jinak musí být zadána úplná cesta a název souboru. Zástupné é (".. \\myfile.txt") a názvy sdílených složek UNC ("\\\shared directory\\myfile.txt") jsou podporovány. Pokud soubor není nalezen, vyvolá se výjimka FileNotFoundException .

Tato metoda používá funkci, která TransmitFile se nachází v rozhraní API Windows Sockets 2. Další informace o TransmitFile funkci a jejích příznakech najdete v dokumentaci k rozhraní Windows Sockets .

SendFile synchronně odešle soubor vzdálenému hostiteli zadanému Connect v metodě nebo Accept . SendFile lze použít pro protokoly orientované na připojení i pro protokoly bez připojení.

Pokud používáte protokol bez připojení, musíte před voláním této metody volat Connect , jinak SendFile vyvolá SocketException výjimku. Pokud používáte protokol orientovaný na připojení, musíte buď použít Connect k navázání připojení ke vzdálenému hostiteli, nebo použít Accept k přijetí příchozího připojení.

Pokud používáte protokol orientovaný na připojení, SendFile blokuje se až do odeslání souboru. V režimu SendFile odblokování se může úspěšně dokončit před odesláním celého souboru. Neexistuje žádná záruka, že se odeslaná data zobrazí v síti okamžitě. Za účelem zvýšení efektivity sítě může základní systém zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení SendFile metody znamená, že základní systém měl prostor pro ukládání dat do vyrovnávací paměti pro odeslání do sítě.

Poznámka

Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API windows Sockets verze 2 .

Poznámka

Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.

Platí pro

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

Zdroj:
Socket.cs
Zdroj:
Socket.cs
Zdroj:
Socket.cs

Odešle soubor fileName a vyrovnávací paměti dat do připojeného Socket objektu pomocí zadané TransmitFileOptions hodnoty.

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)

Parametry

fileName
String

Cesta a název souboru, který se má odeslat. Tento parametr může být null.

preBuffer
Byte[]

Data, která se mají odeslat před odesláním souboru. Tento parametr může být null.

postBuffer
Byte[]

Data, která se mají odeslat po odeslání souboru. Tento parametr může být null.

flags
TransmitFileOptions

Bitové kombinace hodnot výčtu, která určuje způsob přenosu souboru.

Výjimky

Operační systém není systém Windows NT nebo novější.

-nebo-

Soket není připojený ke vzdálenému hostiteli.

Objekt Socket byl uzavřen.

Objekt Socket není v režimu blokování a nemůže přijmout toto synchronní volání.

Soubor fileName nebyl nalezen.

Při pokusu o přístup k soketu došlo k chybě.

Příklady

Následující příklad kódu vytvoří a připojí soket. Soubor "test.txt" se nachází v kořenovém adresáři místního počítače. V tomto příkladu vytvoříme prebuffer a postbuffer dat a odešleme je na vzdáleného hostitele se souborem. Používají se výchozí hodnoty TransmitFileOptions .

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

Toto přetížení vyžaduje název souboru, který chcete odeslat, a bitovou kombinaci TransmitFileOptions hodnot. Parametr preBuffer obsahuje všechna data, která chcete před souborem předcházet. postBuffer obsahuje data, která chcete sledovat v souboru. Pokud fileName je v aktuálním pracovním adresáři, může být identifikován pouze názvem souboru, jinak musí být zadána úplná cesta a název souboru. Zástupné é (".. \\myfile.txt") a názvy sdílených složek UNC ("\\\shared directory\\myfile.txt") jsou podporovány.

Parametr flags poskytuje zprostředkovateli služby Window Sockets další informace o přenosu souborů. Další informace o použití tohoto parametru najdete v tématu TransmitFileOptions.

Tato metoda používá funkci, která TransmitFile se nachází v rozhraní API Windows Sockets 2. Další informace o TransmitFile funkci a jejích příznakech najdete v dokumentaci k rozhraní Windows Sockets .

SendFile synchronně odešle soubor vzdálenému hostiteli zadanému Connect v metodě nebo Accept . SendFile lze použít pro protokoly orientované na připojení i pro protokoly bez připojení.

Pokud používáte protokol bez připojení, musíte před voláním této metody volat Connect , jinak SendFile vyvolá SocketException. Pokud používáte protokol orientovaný na připojení, musíte buď použít Connect k navázání připojení ke vzdálenému hostiteli, nebo použít Accept k přijetí příchozího připojení.

Pokud používáte protokol orientovaný na připojení, blokuje se až SendFile do odeslání celého souboru. V režimu SendFile odblokování se může úspěšně dokončit před odesláním celého souboru. Neexistuje žádná záruka, že se odeslaná data zobrazí v síti okamžitě. Za účelem zvýšení efektivity sítě může základní systém zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení SendFile metody znamená, že základní systém měl prostor pro ukládání dat do vyrovnávací paměti pro odeslání do sítě.

Poznámka

Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API windows Sockets verze 2 .

Poznámka

Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.

Platí pro

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

Zdroj:
Socket.cs
Zdroj:
Socket.cs
Zdroj:
Socket.cs

Odešle soubor fileName a vyrovnávací paměti dat do připojeného Socket objektu pomocí zadané TransmitFileOptions hodnoty.

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)

Parametry

fileName
String

A String obsahující cestu a název souboru, který se má odeslat. Tento parametr může být null.

preBuffer
ReadOnlySpan<Byte>

A ReadOnlySpan<T> obsahující data, která se mají odeslat před odesláním souboru. Tato vyrovnávací paměť může být prázdná.

postBuffer
ReadOnlySpan<Byte>

A ReadOnlySpan<T> obsahující data, která se mají odeslat po odeslání souboru. Tato vyrovnávací paměť může být prázdná.

flags
TransmitFileOptions

Jedna nebo více TransmitFileOptions hodnot.

Výjimky

Objekt Socket byl uzavřen.

Objekt Socket není připojen ke vzdálenému hostiteli.

Objekt Socket není v režimu blokování a nemůže přijmout toto synchronní volání.

Soubor fileName nebyl nalezen.

Při pokusu o přístup k soketu došlo k chybě.

Platí pro