2010-05-18 10 views
7

Dane mogą być odczytywane lub zapisywane do podłączonego gniazda TCP za pomocą odbierać(), async_receive(), send() lub async_send() funkcje składowe. Jednakże, jak mogłoby to spowodować krótkich zapisów lub czyta, aplikacja zazwyczaj użyć następujących operacje zamiast: read(), async_read(), write() i async_write().Funkcje odbierania/wysyłania boost.asio gniazda są złe?

Naprawdę nie rozumiem, że uwaga jako read(), async_read(), write() i async_write() może również zakończyć się krótkim pisaniem lub odczytaniem, prawda?
Dlaczego te funkcje nie są takie same?
Czy powinienem ich używać?
Czy ktoś może wyjaśnić tę uwagę dla mnie?

Odpowiedz

6

czytać, async_read, zapisu i async_writeskomponowane funkcje, które wywoływać funkcje klasa wielokrotnie, dopóki jest transmitowany żądana liczba bajtów. Są one zawarte w bibliotece jako udogodnienie. W przeciwnym razie każdy programista musiałby wdrożyć tę samą logikę.

Funkcje klas bezpośrednio owijają podstawowe funkcje systemu operacyjnego, które zasadniczo stanowią w dokumentacji: funkcje te mogą zostać zwrócone przed przesłaniem wszystkich bajtów.

W większości przypadków do przesyłania danych należy używać wolnych (skomponowanych) funkcji.

+0

dlaczego było zaprojektowane w ten sposób? W takim przypadku nie trzeba odbierać wszystkich żądanych bajtów? Dlaczego obiekt gniazda nie zawiera read/write/async_read/async_write? W każdym razie mijasz gniazdo. –

+0

Nie wiem dlaczego, ale prawdopodobnie możesz znaleźć odpowiedź w "Propozycji biblioteki sieciowej dla TR2". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2054.pdf – Dan

+1

Odnośnie wcześniej połączonego dokumentu, patrz strona 8. – Dan

-1

Po pierwsze, musisz zrozumieć słowo "asynchroniczny", oznacza to po prostu "nie musisz czekać". Po wywołaniu akcji asynchronicznych, następująca akcja zostanie wykonana bez oczekiwania na powrót akcji asynchronicznej. Podczas gdy synchroniczna musi czekać, aż do powrotu poprzednich akcji synchronicznych. Dwa kolejne próbki z Boost.Asio miałoby sensu: A synchronous TCP daytime server

(Ups za mało reputacji, druga próbka jest łatwo znaleźć choć nazywane „Serwer dzienne asynchroniczny TCP”)

+0

Jak to jest związane z moim pytaniem? –

+0

Przepraszam .... Zakładam, że pierwszym akapitem w twoim pytaniu był cytat ... więc je wtrącam ..... – rhapsodyn