TClientSocket i długość bufora

0

Więc dzisiaj mam taki problem : piszę sobie obsługę protokołu pop3 (na TClientSocket), i jak próbuję odebrać wiadomość, to mi się odbiera tylko pierwsz 8192 bajty. Czy istnieje możliwość zwiększenia rozmiaru bofora przyjmowanego przez TClientSocket, jeśli tak to jak, a jeśli nie, to może ktoś ma jakiś inny pomysł na odebranie całej wiadomości, a nie tylko pierwszych 8192 bajtów.

0

A nie mozesz zrobic jakiegos swojego bufora i w OnRead czy czyms tam dopisywac po kawalku?

0

Podziel pakiet na kilka.

0

No ale jak? Nie bardzo wiem, jak się do tego zabrać.

0

Robisz tak, że deklarujesz sobię jakąś zmienną (TStringList, albo po prostu String) i przy każdym OnRead doklejasz odczytany tekst do tej zmiennej. I jeśli ściągniesz całość (po Content-Length w nagłówku sprawdzasz ile ma być, porównujesz z długością zmiennej i jest), to dopiero wtedy robisz to, co masz robić po odbiorze wiadomości.

0

OK, problem rozwiązany.

Dla potomnych : serwer po wysłaniu do niego RETR nrwiadomosci, najpierw wysyła +OK rozmiar, a potem dopiero treść wiadomości, ale tego już ClientSocket nie łapie. Dodatkowo, jak się odbiera za pomocą ReceiveText, to za nic nie da się przeskoczyć tych 8192 bajtów, trzeba użyć ReceiveBuf. Ja rozwiązałem to w ten sposób, że najpierw odbiera za pomocą ReceiveText ten komunikat o rozmiarze, a potem po 4 bajty (nie wiem dlaczego - tylko tyle odbiera za jednym razem) w pętli odbieram treść wiadomości.

//DOPISANE
Tekst o rozmiarze wiadomości trzeba odebrać za pomocą ReceiveText, gdyż jak się odbierze za pomocą ReceiveBuf, to wtedy gubi 4 pierwsze bajty z wiadomości (albo ja coś źle robię [diabel] ).

1 użytkowników online, w tym zalogowanych: 0, gości: 1