Socket.SendFile Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wysyła plik i opcjonalne dane synchronicznie do połączonego Socketelementu .
Przeciążenia
SendFile(String) |
Wysyła plik |
SendFile(String, Byte[], Byte[], TransmitFileOptions) |
Wysyła plik |
SendFile(String, ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, TransmitFileOptions) |
Wysyła plik |
SendFile(String)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła plik fileName
do połączonego Socket obiektu z flagą transmisji UseDefaultWorkerThread .
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
Element String zawierający ścieżkę i nazwę pliku do wysłania. Ten parametr może mieć wartość null
.
Wyjątki
Gniazdo nie jest połączone z hostem zdalnym.
Obiekt Socket został zamknięty.
Obiekt Socket nie jest w trybie blokowania i nie może zaakceptować tego wywołania synchronicznego.
Nie można odnaleźć pliku fileName
.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Przykłady
Poniższy przykład kodu tworzy i łączy gniazdo, a następnie wysyła plik do hosta zdalnego. Plik "test.txt" znajduje się w katalogu głównym komputera lokalnego.
// 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();
Uwagi
To przeciążenie wysyła plik fileName
do połączonego gniazda. Domyślnie flags
parametr ma UseDefaultWorkerThread wartość (0), a parametry i postBuffer
mają null
wartość domyślną preBuffer
. Jeśli fileName
znajduje się w katalogu lokalnym, może zostać zidentyfikowany przy użyciu tylko nazwy pliku. W przeciwnym razie należy określić pełną ścieżkę i nazwę pliku. Symbole wieloznaczne (".. \\myfile.txt") i nazwy udziałów UNC ("\\\\shared directory\\myfile.txt") są obsługiwane. Jeśli plik nie zostanie znaleziony, zostanie zgłoszony wyjątek FileNotFoundException .
Ta metoda używa funkcji znajdującej TransmitFile
się w interfejsie API Windows Sockets 2. Aby uzyskać więcej informacji na temat TransmitFile
funkcji i jej flag, zobacz dokumentację windows Sockets .
SendFile Synchronicznie wysyła plik do hosta zdalnego określonego w metodzie Connect or Accept . SendFile można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.
Jeśli używasz protokołu bez połączenia, musisz wywołać Connect metodę przed wywołaniem tej metody, w przeciwnym razie SendFile zgłasza wyjątek SocketException . Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć Connect polecenia , aby ustanowić połączenie hosta zdalnego lub użyć Accept go do akceptowania połączenia przychodzącego.
Jeśli używasz protokołu zorientowanego na połączenie, SendFile blokuje do momentu wysłania pliku. W trybie SendFile bezblokowania może zakończyć się pomyślnie przed wysłaniem całego pliku. Nie ma gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości wychodzących danych. Pomyślne ukończenie SendFile metody oznacza, że podstawowy system miał miejsce do buforowania danych dla wysyłania sieciowego.
Uwaga
Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2 , aby uzyskać szczegółowy opis błędu.
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.
Dotyczy
SendFile(String, Byte[], Byte[], TransmitFileOptions)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła plik fileName
i bufory danych do połączonego Socket obiektu przy użyciu określonej TransmitFileOptions wartości.
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
Ścieżka i nazwa pliku do wysłania. Ten parametr może mieć wartość null
.
- preBuffer
- Byte[]
Dane do wysłania przed wysłaniem pliku. Ten parametr może mieć wartość null
.
- postBuffer
- Byte[]
Dane do wysłania po wysłaniu pliku. Ten parametr może mieć wartość null
.
- flags
- TransmitFileOptions
Bitowa kombinacja wartości wyliczenia, która określa sposób przesyłania pliku.
Wyjątki
System operacyjny nie jest systemem Windows NT lub nowszym.
-lub-
Gniazdo nie jest połączone z hostem zdalnym.
Obiekt Socket został zamknięty.
Obiekt Socket nie jest w trybie blokowania i nie może zaakceptować tego wywołania synchronicznego.
Nie można odnaleźć pliku fileName
.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Przykłady
Poniższy przykład kodu tworzy i łączy gniazdo. Plik "test.txt" znajduje się w katalogu głównym komputera lokalnego. W tym przykładzie utworzymy prebuffer i postbuffer danych i wyślemy je do hosta zdalnego za pomocą pliku . Używane są wartości domyślne 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();
Uwagi
To przeciążenie wymaga nazwy pliku, który chcesz wysłać, i bitowej kombinacji TransmitFileOptions wartości. Parametr preBuffer
zawiera wszystkie dane, które chcesz poprzedzić plikiem.
postBuffer
zawiera dane, które mają być zgodne z plikiem. Jeśli fileName
znajduje się w bieżącym katalogu roboczym, może zostać zidentyfikowany przy użyciu tylko nazwy pliku. W przeciwnym razie należy określić pełną ścieżkę i nazwę pliku. Symbole wieloznaczne (".. \\myfile.txt") i nazwy udziałów UNC ("\\\\shared directory\\myfile.txt") są obsługiwane.
Parametr flags
udostępnia dostawcę usługi Windows Sockets z dodatkowymi informacjami na temat transferu plików. Aby uzyskać więcej informacji na temat używania tego parametru, zobacz TransmitFileOptions.
Ta metoda używa funkcji znajdującej TransmitFile
się w interfejsie API Windows Sockets 2. Aby uzyskać więcej informacji na temat TransmitFile
funkcji i jej flag, zobacz dokumentację windows Sockets .
SendFile Synchronicznie wysyła plik do hosta zdalnego określonego w metodzie Connect or Accept . SendFile można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.
Jeśli używasz protokołu bez połączenia, przed wywołaniem tej metody należy wywołać Connect metodę . W przeciwnym razie SendFile zgłaszany jest wyjątek SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć Connect polecenia , aby nawiązać połączenie hosta zdalnego, lub użyć polecenia Accept , aby zaakceptować połączenie przychodzące.
Jeśli używasz protokołu zorientowanego na połączenie, SendFile blokuje do momentu wysłania całego pliku. W trybie SendFile bezblokowania może zakończyć się pomyślnie przed wysłaniem całego pliku. Nie ma gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości wychodzących danych. Pomyślne ukończenie SendFile metody oznacza, że podstawowy system miał miejsce do buforowania danych dla wysyłania sieciowego.
Uwaga
Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2 , aby uzyskać szczegółowy opis błędu.
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.
Dotyczy
SendFile(String, ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, TransmitFileOptions)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła plik fileName
i bufory danych do połączonego Socket obiektu przy użyciu określonej TransmitFileOptions wartości.
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
Element String zawierający ścieżkę i nazwę pliku do wysłania. Ten parametr może mieć wartość null
.
- preBuffer
- ReadOnlySpan<Byte>
Element ReadOnlySpan<T> zawierający dane do wysłania przed wysłaniem pliku. Ten bufor może być pusty.
- postBuffer
- ReadOnlySpan<Byte>
Element ReadOnlySpan<T> zawierający dane do wysłania po wysłaniu pliku. Ten bufor może być pusty.
- flags
- TransmitFileOptions
Co najmniej jedna wartość TransmitFileOptions .
Wyjątki
Obiekt Socket został zamknięty.
Obiekt Socket nie jest połączony z hostem zdalnym.
Obiekt Socket nie jest w trybie blokowania i nie może zaakceptować tego wywołania synchronicznego.
Nie można odnaleźć pliku fileName
.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.