Aracılığıyla paylaş


Socket.SendFile Yöntem

Tanım

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

Aşırı Yüklemeler

Name Description
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 bağlı Socket bir nesneye veri dosyasını fileName ve arabelleklerini gönderir.

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

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

SendFile(String)

Kaynak:
Socket.cs
Kaynak:
Socket.cs
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 ana bilgisayara bağlı değil.

Socket Nesne 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 = 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ı ("\\\\shared directory\\myfile.txt") desteklenir. Dosya bulunamazsa, özel durum FileNotFoundException oluşturulur.

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

SendFileveya Accept yönteminde Connect 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. Engelsiz 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 bir ağ gönderme işlemi için verilerinizi arabelleğe almak için yeterli alanı olduğu anlamına gelir.

Uyarı

bir SocketExceptionalırsanız, özelliğini kullanarak SocketException.ErrorCode belirli bir hata kodunu alın. 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.

Uyarı

Bu üye, uygulamanızda ağ izlemeyi etkinleştirdiğinizde izleme bilgilerini döndürür. Daha fazla bilgi için bkz. .NET Framework'te Ağ İzleme.

Şunlara uygulanır

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

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

Belirtilen TransmitFileOptions değeri kullanarak bağlı Socket bir nesneye veri dosyasını fileName ve arabelleklerini 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 üzeri değildir.

-veya-

Yuva uzak bir ana bilgisayara bağlı değil.

Socket Nesne 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 dosyayı kullanarak 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 = 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ı takip etmek 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ı ("\\\\shared directory\\myfile.txt") desteklenir.

parametresi, flags Window Sockets 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 Yuvaları 2 API'sinde bulunan işlevi kullanır. İşlev ve bayrakları hakkında TransmitFile daha fazla bilgi için Windows Yuvaları belgelerine bakın.

SendFileveya Accept yönteminde Connect 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 bir 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. Engelsiz 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 bir ağ gönderme işlemi için verilerinizi arabelleğe almak için yeterli alanı olduğu anlamına gelir.

Uyarı

bir SocketExceptionalırsanız, özelliğini kullanarak SocketException.ErrorCode belirli bir hata kodunu alın. 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.

Uyarı

Bu üye, uygulamanızda ağ izlemeyi etkinleştirdiğinizde izleme bilgilerini döndürür. Daha fazla bilgi için bkz. .NET Framework'te Ağ İzleme.

Şunlara uygulanır

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

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

Belirtilen TransmitFileOptions değeri kullanarak bağlı Socket bir nesneye veri dosyasını fileName ve arabelleklerini 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

Socket Nesne kapatıldı.

Socket Nesne 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