Socket.SendPacketsAsync(SocketAsyncEventArgs) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bağlı Socket bir nesneye zaman uyumsuz olarak bir dosya koleksiyonu veya bellek veri arabellekleri gönderir.
public:
bool SendPacketsAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool SendPacketsAsync(System.Net.Sockets.SocketAsyncEventArgs e);
member this.SendPacketsAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function SendPacketsAsync (e As SocketAsyncEventArgs) As Boolean
Parametreler
SocketAsyncEventArgs Bu zaman uyumsuz yuva işlemi için kullanılacak nesne.
Döndürülenler
true G/Ç işlemi bekliyorsa.
Completed parametresindeki e olay, işlem tamamlandıktan sonra tetiklenir.
false G/Ç işlemi zaman uyumlu olarak tamamlandıysa. Bu durumda, Completed parametredeki e olay tetiklenmez ve e parametre olarak geçirilen nesne, yöntem çağrısı işlemin sonucunu almak için döndürdükten hemen sonra incelenebilir.
Özel durumlar
özelliğinde FilePath belirtilen dosya bulunamadı.
Parametresinde e belirtilen nesne kullanılarak SocketAsyncEventArgs bir yuva işlemi zaten devam ediyor.
Socket uzak bir konağa bağlı değil.
Kapatılmış Socket .
Bağlantısız Socket bir araç kullanılıyor ve gönderilen dosya temel alınan aktarımın paket boyutu üst sınırını aşıyor.
Açıklamalar
SendPacketsAsync yöntemi, uzak konağa bir dosya koleksiyonu veya bellek veri arabellekleri göndermek için kullanılır. uzak Socket konağa zaten bağlı olmalıdır.
Çalışma dizinindeki bir System.Net.Sockets.SendPacketsElement dosyaya başvuruda bulunursa, dosya yalnızca dosyanın adıyla tanımlanabilir; aksi takdirde, dosyanın tam yolu ve adı belirtilmelidir. Joker karakterler ve UNC paylaşım adları desteklenir. Dosya bulunamazsa oluşturulur FileNotFoundException .
Tamamlanma bildirimi almak için EventHandler<SocketAsyncEventArgs> temsilcisini uygulayan bir geri çağırma yöntemi oluşturmanız ve geri çağırmayı SocketAsyncEventArgs.Completed olaya eklemeniz gerekir.
SocketAsyncEventArgs.SendPacketsFlags parametresindeki e özelliği, 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öntemi başarıyla çağırmak için nesnedeki System.Net.Sockets.SocketAsyncEventArgs aşağıdaki özellikler ve olaylar gereklidir:
Çağıran, yöntemi çağırmadan SocketAsyncEventArgs.UserToken önce istenen herhangi bir kullanıcı durumu nesnesine özelliğini ayarlayabilirSendPacketsAsync, böylece bilgiler geri çağırma yönteminde alınabilir. Geri çağırma için tek bir nesneden daha fazla bilgi gerekiyorsa, gerekli diğer durum bilgilerini üye olarak tutmak için küçük bir sınıf oluşturulabilir.
Bu yöntem, Windows Sockets 2 API'sinde bulunan TransmitPackets işlevini kullanır. TransmitPackets işlevi ve bayrakları hakkında daha fazla bilgi için Windows Yuvaları belgelerine bakın.
Bağlantı odaklı protokoller için tasarlanmış olsa da, SendPacketsAsync yöntemi, varsayılan bir uzak konak oluşturmak için önce , Connectveya ConnectAsync yöntemini çağırmanız BeginConnectkoşuluyla, bağlantısız protokoller için de çalışır. Bağlantısız protokollerle, dosyanızın boyutunun temel alınan hizmet sağlayıcısının en büyük paket boyutunu aşmadığından da emin olmanız gerekir. Gönderiliyorsa, veri birimi gönderilmez ve SendPacketsAsync bir SocketException özel durum oluşturur.
SendPacketsAsync yöntemi, kullanıldığı işletim sistemine göre iyileştirilmiştir. Windows server sürümlerinde yöntemi yüksek SendPacketsAsync performans için iyileştirilmiştir.
Windows istemci sürümlerinde, SendPacketsAsync yöntem en düşük bellek ve kaynak kullanımı için iyileştirilmiştir.
TransmitFileOptions.UseKernelApc parametresindeki özelliğinde bayrağının SocketAsyncEventArgs.SendPacketsFlagse kullanılması önemli performans avantajları sağlayabilir. Yöntem çağrısını SendPacketsAsync başlatan iş parçacığı ağır hesaplamalar için kullanılıyorsa, olası olmasa da, BU APC'lerin başlatılması engellenebilir. Çekirdek ve kullanıcı modu API'leri arasında fark olduğunu unutmayın. Çekirdek API'leri, bir iş parçacığı bekleme durumundayken başlatılır. Kullanıcı modu APC'leri, bir iş parçacığı uyarılabilen bir bekleme durumundayken başlatılır