Udostępnij za pośrednictwem


Socket.SendPacketsAsync(SocketAsyncEventArgs) Metoda

Definicja

Wysyła kolekcję plików lub buforów danych pamięci asynchronicznie do połączonego Socket obiektu.

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

Parametry

e
SocketAsyncEventArgs

Obiekt SocketAsyncEventArgs do użycia dla tej operacji asynchronicznego gniazda.

Zwraca

true jeśli operacja we/wy jest oczekująca. Zdarzenie Completed parametru e zostanie podniesione po zakończeniu operacji.

false jeśli operacja we/wy została ukończona synchronicznie. W takim przypadku Completed zdarzenie parametru e nie zostanie podniesione, a e obiekt przekazany jako parametr może zostać zbadany natychmiast po powrocie wywołania metody w celu pobrania wyniku operacji.

Wyjątki

Nie można odnaleźć pliku określonego FilePath we właściwości.

Operacja gniazda była już w toku przy użyciu SocketAsyncEventArgs obiektu określonego w parametrze e .

Element Socket nie jest połączony z hostem zdalnym.

Została zamknięta Socket .

Używany jest bez Socket połączenia, a wysyłany plik przekracza maksymalny rozmiar pakietu bazowego transportu.

Uwagi

Metoda SendPacketsAsync służy do wysyłania kolekcji plików lub buforów danych pamięci do hosta zdalnego. Element Socket musi być już połączony z hostem zdalnym.

System.Net.Sockets.SendPacketsElement Jeśli plik odwołuje się do pliku w katalogu roboczym, może być identyfikowany tylko z nazwą pliku. W przeciwnym razie należy określić pełną ścieżkę i nazwę pliku. Obsługiwane są symbole wieloznaczne i nazwy udziałów UNC. Jeśli plik nie zostanie znaleziony, FileNotFoundException zostanie zgłoszony.

Aby otrzymywać powiadomienia o zakończeniu, należy utworzyć metodę wywołania zwrotnego, która implementuje delegata EventHandler<SocketAsyncEventArgs> i dołączyć wywołanie zwrotne do SocketAsyncEventArgs.Completed zdarzenia.

Właściwość SocketAsyncEventArgs.SendPacketsFlags parametru e udostępnia dostawcę usługi Windows Sockets z dodatkowymi informacjami o transferze plików. Aby uzyskać więcej informacji na temat używania tego parametru, zobacz TransmitFileOptions.

Następujące właściwości i zdarzenia obiektu są wymagane do pomyślnego System.Net.Sockets.SocketAsyncEventArgs wywołania tej metody:

Obiekt wywołujący może ustawić SocketAsyncEventArgs.UserToken właściwość na dowolny obiekt stanu użytkownika żądany przed wywołaniem SendPacketsAsync metody, aby informacje mogły zostać pobrane w metodzie wywołania zwrotnego. Jeśli wywołanie zwrotne wymaga więcej informacji niż pojedynczy obiekt, można utworzyć małą klasę, aby przechowywać inne wymagane informacje o stanie jako elementy członkowskie.

Ta metoda używa funkcji TransmitPackets znalezionej w interfejsie API Windows Sockets 2. Aby uzyskać więcej informacji na temat funkcji TransmitPackets i jej flag, zobacz dokumentację gniazd systemu Windows .

Mimo że jest przeznaczona do protokołów zorientowanych na połączenie, SendPacketsAsync metoda działa również w przypadku protokołów bez połączenia, pod warunkiem, że najpierw wywołasz metodę BeginConnect, Connectlub ConnectAsync w celu ustanowienia domyślnego hosta zdalnego. W przypadku protokołów bez połączenia należy również upewnić się, że rozmiar pliku nie przekracza maksymalnego rozmiaru pakietu bazowego dostawcy usług. Jeśli tak się dzieje, datagram nie jest wysyłany i SendPacketsAsync zgłasza SocketException wyjątek.

Metoda SendPacketsAsync jest zoptymalizowana zgodnie z systemem operacyjnym, na którym jest używana. W wersjach SendPacketsAsync systemu Windows Server metoda jest zoptymalizowana pod kątem wysokiej wydajności.

W wersjach klienckich SendPacketsAsync systemu Windows metoda jest zoptymalizowana pod kątem minimalnego wykorzystania pamięci i zasobów.

TransmitFileOptions.UseKernelApc Użycie flagi we właściwości parametru SocketAsyncEventArgs.SendPacketsFlagse może przynieść znaczne korzyści z wydajności. Jeśli wątek inicjujący SendPacketsAsync wywołanie metody jest używany do dużych obliczeń, jest możliwe, choć mało prawdopodobne, że nie można uruchomić interfejsów API. Należy pamiętać, że istnieje różnica między interfejsami API jądra i trybu użytkownika. Interfejsy API jądra są uruchamiane, gdy wątek jest w stanie oczekiwania. Interfejsy API w trybie użytkownika są uruchamiane, gdy wątek jest w stanie oczekiwania z możliwością alertu

Dotyczy

Zobacz też