Socket.SendFile Yöntem

Tanım

Bağlı Socketbir öğesine bir dosya ve isteğe bağlı verileri zaman uyumlu olarak gönderir.

Aşırı Yüklemeler

SendFile(String)

Dosyayı fileName iletim bayrağıyla bağlı Socket bir nesneye UseDefaultWorkerThread gönderir.

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

Belirtilen TransmitFileOptions değeri kullanarak dosyayı fileName ve veri arabelleklerini bağlı Socket bir nesneye gönderir.

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

Belirtilen TransmitFileOptions değeri kullanarak dosyayı fileName ve veri arabelleklerini bağlı Socket bir nesneye gönderir.

SendFile(String)

Kaynak:
Socket.cs
Kaynak:
Socket.cs
Kaynak:
Socket.cs

Dosyayı fileName iletim bayrağıyla bağlı Socket bir nesneye UseDefaultWorkerThread gönderir.

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)

Parametreler

fileName
String

String Gönderilecek dosyanın yolunu ve adını içeren bir. Bu parametre olabilir null.

Özel durumlar

Yuva uzak bir konağa bağlı değil.

Nesne Socket kapatıldı.

Socket Nesne engelleme modunda değil ve bu zaman uyumlu çağrıyı kabul edemiyor.

Dosya fileName bulunamadı.

Yuvaya erişmeye çalışılırken bir hata oluştu.

Örnekler

Aşağıdaki kod örneği bir yuva oluşturup bağlar ve ardından uzak konağa bir dosya gönderir. "test.txt" dosyası yerel makinenin kök dizininde bulunur.

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

Açıklamalar

Bu aşırı yükleme, dosyayı fileName bağlı yuvaya gönderir. flags parametresi varsayılan olarak UseDefaultWorkerThread (0) ve preBuffer ve postBuffer parametreleri varsayılan olarak nullkullanılır. Yerel dizindeyse fileName , yalnızca dosyanın adıyla tanımlanabilir; aksi takdirde, dosyanın tam yolu ve adı belirtilmelidir. Joker karakterler (".. \\myfile.txt") ve UNC paylaşım adları ("\\\\paylaşılan directory\\myfile.txt") desteklenir. Dosya bulunamazsa, özel durum FileNotFoundException oluşturulur.

Bu yöntem, TransmitFile Windows Sockets 2 API'sinde bulunan işlevi kullanır. İşlev ve bayrakları hakkında TransmitFile daha fazla bilgi için Windows Yuvaları belgelerine bakın.

SendFile veya yönteminde ConnectAccept belirtilen uzak konağa zaman uyumlu olarak bir dosya gönderir. SendFile hem bağlantı odaklı hem de bağlantısız protokoller için kullanılabilir.

Bağlantısız bir protokol kullanıyorsanız, bu yöntemi çağırmadan önce çağırmalısınız Connect , aksi takdirde SendFile bir SocketException özel durum oluşturur. Bağlantı odaklı bir protokol kullanıyorsanız, uzak konak bağlantısı kurmak için veya Connect gelen bağlantıyı kabul etmek için komutunu kullanmanız Accept gerekir.

Bağlantı odaklı bir protokol kullanıyorsanız, SendFile dosya gönderilene kadar engeller. Engelleyici olmayan modda, SendFile dosyanın tamamı gönderilmeden önce başarıyla tamamlanabilir. Gönderdiğiniz verilerin ağda hemen görüneceğinin garantisi yoktur. Ağ verimliliğini artırmak için, temel alınan sistem önemli miktarda giden veri toplanana kadar iletimi geciktirebilir. Yöntemin SendFile başarıyla tamamlanması, temel alınan sistemin verilerinizi ağ gönderme için arabelleğe almak için yeterli alanı olduğu anlamına gelir.

Not

bir alırsanız, belirli bir SocketExceptionhata kodunu almak için özelliğini kullanın SocketException.ErrorCode . Bu kodu aldıktan sonra, hatanın ayrıntılı açıklaması için Windows Yuvaları sürüm 2 API hata kodu belgelerine bakın.

Not

Uygulamanızda ağ izlemeyi etkinleştirdiğinizde, bu üye izleme bilgilerini çıkarır. Daha fazla bilgi için bkz. .NET Framework'da Ağ İzleme.

Şunlara uygulanır

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

Kaynak:
Socket.cs
Kaynak:
Socket.cs
Kaynak:
Socket.cs

Belirtilen TransmitFileOptions değeri kullanarak dosyayı fileName ve veri arabelleklerini bağlı Socket bir nesneye gönderir.

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)

Parametreler

fileName
String

Gönderilecek dosyanın yolu ve adı. Bu parametre olabilir null.

preBuffer
Byte[]

Dosya gönderilmeden önce gönderilecek veriler. Bu parametre olabilir null.

postBuffer
Byte[]

Dosya gönderildikten sonra gönderilecek veriler. Bu parametre olabilir null.

flags
TransmitFileOptions

Dosyanın nasıl aktarıldığını belirten numaralandırma değerlerinin bit düzeyinde birleşimi.

Özel durumlar

İşletim sistemi Windows NT veya sonraki sürümlerde değil.

-veya-

Yuva uzak bir konağa bağlı değil.

Nesne Socket kapatıldı.

Socket Nesne engelleme modunda değil ve bu zaman uyumlu çağrıyı kabul edemiyor.

Dosya fileName bulunamadı.

Yuvaya erişmeye çalışılırken bir hata oluştu.

Örnekler

Aşağıdaki kod örneği bir yuva oluşturur ve bağlar. "test.txt" dosyası yerel makinenin kök dizininde bulunur. Bu örnekte, verilerin ön yüklemesini ve postbuffer'ını oluşturup bunları dosyayla birlikte uzak ana bilgisayara göndereceğiz. Varsayılan TransmitFileOptions değer kullanılır.

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

Açıklamalar

Bu aşırı yükleme, göndermek istediğiniz dosyanın adını ve değerlerin bit düzeyinde bir bileşimini TransmitFileOptions gerektirir. parametresi, preBuffer dosyadan önce getirmek istediğiniz tüm verileri içerir. postBuffer , dosyayı izlemek istediğiniz verileri içerir. Geçerli çalışma dizinindeyse fileName , yalnızca dosyanın adıyla tanımlanabilir; aksi takdirde, dosyanın tam yolu ve adı belirtilmelidir. Joker karakterler (".. \\myfile.txt") ve UNC paylaşım adları ("\\\\paylaşılan directory\\myfile.txt") desteklenir.

parametresi, flags Pencere Yuvaları hizmet sağlayıcısına dosya aktarımı hakkında ek bilgiler sağlar. Bu parametreyi kullanma hakkında daha fazla bilgi için bkz TransmitFileOptions. .

Bu yöntem, TransmitFile Windows Sockets 2 API'sinde bulunan işlevi kullanır. İşlev ve bayrakları hakkında TransmitFile daha fazla bilgi için Windows Yuvaları belgelerine bakın.

SendFile veya yönteminde ConnectAccept belirtilen uzak konağa zaman uyumlu olarak bir dosya gönderir. SendFile hem bağlantı odaklı hem de bağlantısız protokoller için kullanılabilir.

Bağlantısız bir protokol kullanıyorsanız, bu yöntemi çağırmadan önce çağırmalısınız Connect ; aksi takdirde SendFile bir SocketExceptionoluşturur. Bağlantı odaklı bir protokol kullanıyorsanız, uzak konak bağlantısı kurmak için veya Connect gelen bağlantıyı kabul etmek için komutunu kullanmanız Accept gerekir.

Bağlantı odaklı bir protokol kullanıyorsanız, SendFile dosyanın tamamı gönderilene kadar engeller. Engelleyici olmayan modda, SendFile dosyanın tamamı gönderilmeden önce başarıyla tamamlanabilir. Gönderdiğiniz verilerin ağda hemen görüneceğinin garantisi yoktur. Ağ verimliliğini artırmak için, temel alınan sistem önemli miktarda giden veri toplanana kadar iletimi geciktirebilir. Yöntemin SendFile başarıyla tamamlanması, temel alınan sistemin verilerinizi ağ gönderme için arabelleğe almak için yeterli alanı olduğu anlamına gelir.

Not

bir alırsanız, belirli bir SocketExceptionhata kodunu almak için özelliğini kullanın SocketException.ErrorCode . Bu kodu aldıktan sonra, hatanın ayrıntılı açıklaması için Windows Yuvaları sürüm 2 API hata kodu belgelerine bakın.

Not

Uygulamanızda ağ izlemeyi etkinleştirdiğinizde, bu üye izleme bilgilerini çıkarır. Daha fazla bilgi için bkz. .NET Framework'da Ağ İzleme.

Şunlara uygulanır

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

Kaynak:
Socket.cs
Kaynak:
Socket.cs
Kaynak:
Socket.cs

Belirtilen TransmitFileOptions değeri kullanarak dosyayı fileName ve veri arabelleklerini bağlı Socket bir nesneye gönderir.

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)

Parametreler

fileName
String

String Gönderilecek dosyanın yolunu ve adını içeren bir. Bu parametre olabilir null.

preBuffer
ReadOnlySpan<Byte>

ReadOnlySpan<T> Dosya gönderilmeden önce gönderilecek verileri içeren bir. Bu arabellek boş olabilir.

postBuffer
ReadOnlySpan<Byte>

ReadOnlySpan<T> Dosya gönderildikten sonra gönderilecek verileri içeren bir. Bu arabellek boş olabilir.

flags
TransmitFileOptions

Bir veya daha fazla TransmitFileOptions değer.

Özel durumlar

Nesne Socket kapatıldı.

Nesne Socket uzak bir konağa bağlı değil.

Socket Nesne engelleme modunda değil ve bu zaman uyumlu çağrıyı kabul edemiyor.

Dosya fileName bulunamadı.

Yuvaya erişmeye çalışılırken bir hata oluştu.

Şunlara uygulanır