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, işlemin sonucunu almak için yöntem çağrısı döndürüldükten hemen sonra incelenebilir.
Özel durumlar
özelliğinde FilePath belirtilen dosya bulunamadı.
parametresinde belirtilen e
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 en büyük paket boyutunu aşıyor.
Açıklamalar
SendPacketsAsync yöntemi, uzak konağa 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 System.Net.Sockets.SendPacketsElement dizinindeki bir 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 bilgi 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 SendPacketsAsync önce istenen herhangi bir kullanıcı durumu nesnesine özelliğini ayarlayabilirSocketAsyncEventArgs.UserToken, böylece bilgiler geri çağırma yönteminde alınabilir. Geri çağırma tek bir nesneden daha fazla bilgiye ihtiyaç duyuyorsa, diğer gerekli 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 protokollerde, 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 SendPacketsAsync yöntemi yüksek performans için iyileştirilmiştir.
Windows istemci sürümlerinde yöntemi en SendPacketsAsync düşük bellek ve kaynak kullanımı için iyileştirilmiştir.
parametresindeki TransmitFileOptions.UseKernelApc ö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. Bir iş parçacığı uyarılabilir bekleme durumundayken kullanıcı modu API'leri başlatılır