Próbuję zrozumieć klasy "SocketAsyncEventArgs" w języku C#. http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspxC# SocketAsyncEventArgs obsługa odbierania i wysyłania danych
śledzę ten tutorial: http://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod
Teraz siedzę w jaki sposób dokładnie należy przetwarzać dane z mojego serwera. Próbuję użyć SocketAsyncEventArgs dla podłączonego klienta z przydzielonym obszarem bufora o wielkości 512 bajtów w buforze BufferManager. Następnie chcę odszyfrować dane z bajtu [] do mojej własnej klasy niestandardowej (ClientPacket), która przechowuje bajt [] do dekodowania i odczytu.
To wszystko jest dobrze, ale mój serwer nie zawsze odpowie dane pytanie brzmi:
używać 1 SocketAsyncEventArgs dla odbioru i pętli wokół przetwarzać odbierać dane, a następnie przydzielić do SocketAsyncEventArgs z puli ilekroć Muszę wysłać, a następnie zwrócić po zakończeniu?
A jak SocketAsyncEventArgs wie, kiedy czytanie jest zakończone? (gdy skończy się z buforem bajtowym [], zanim nadpisze go z nowymi danymi), np. w jaki sposób jest on zwracany do puli, gdy jest to zrobione, jeśli nie odpowiem z powrotem?
Powiedziałeś, ustawiając go na nowy bajt [], ale dzielę duży blok bufora na wszystkie SocketAsyncEventArgs, Jeśli odczytam z tego bloku bufora w pakiecie, blok bufora może zostać nadpisany przez następne przychodzące dane, nawet jeśli skopiuję tablicę bajtów [], to jest przeciwko użyciu bloku bufora do wysyłania/odbierania danych? W jaki sposób mogę wysłać dane z tym samym obiektem, gdy operacja odbierania może się zdarzyć w dowolnym momencie? –
Wygląda na to, że zakładasz pojedyncze połączenie między dwoma komputerami. Nie można ponownie użyć tylko jednego SocketAsyncEventArgs podczas obsługi wielu równoczesnych połączeń, o czym moim zdaniem chodziło pytanie. (I na czym opiera się SocketAsyncEventArgs). –
dzięki SonOfPirate, byłoby wspaniale, gdyby można było opracować więcej na odbieranie dużej ilości danych. w szczególności wyjaśnij proszę, czy muszę ponownie zadzwonić do ReceiveAsync za każdym razem, zanim dobiegnie końca; lub Framework zrobi to za mnie? –