Udostępnij za pośrednictwem


Socket.SendFile Metoda

Definicja

Wysyła plik i opcjonalne dane synchronicznie do połączonego Socketelementu .

Przeciążenia

SendFile(String)

Wysyła plik fileName do połączonego Socket obiektu z flagą transmisji UseDefaultWorkerThread .

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

Wysyła plik fileName i bufory danych do połączonego Socket obiektu przy użyciu określonej TransmitFileOptions wartości.

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

Wysyła plik fileName i bufory danych do połączonego Socket obiektu przy użyciu określonej TransmitFileOptions wartości.

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ą nullwartość 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.

Dotyczy