Architektura typu klient serwer: uproszczony klient POP3

Podobne dokumenty
Architektura typu klient serwer: przesyłanie pliku tekstowo oraz logowania do serwera za pomocą szyfrowanego hasła

3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);

Sieci komputerowe i bazy danych

Lab5 - Badanie protokołów pocztowych

Instrukcja konfiguracji funkcji skanowania

ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013

TCP - receive buffer (queue), send buffer (queue)

Konfiguracja poczty IMO dla urządzeń mobilnych z systemem ios oraz Android.

Procedura konfiguracji programu Outlook 2003 z wykorzystaniem

Klient-Serwer Komunikacja przy pomocy gniazd

Podstawowe typy serwerów

INSTRUKCJA KONFIGURACJI KLIENTA POCZTOWEGO

Aplikacja Sieciowa. Najpierw tworzymy nowy projekt, tym razem pracować będziemy w konsoli, a zatem: File->New- >Project

Obsługa poczty elektronicznej w domenie emeritus.ue.poznan.pl

ZAKŁADANIE POCZTY ELEKTRONICZNEJ - na przykładzie serwisu

Internetowy serwis Era mail Aplikacja sieci Web

Bezpieczeństwo poczty elektronicznej

Programowanie sieciowe

Literatura uzupełniająca: W. Richard Stevens, Programowanie zastosowań sieciowych w systemie Unix WNT 1998

Konfiguracja poczty IMO w programach Microsoft Outlook oraz Mozilla Thunderbird

Aplikacja Sieciowa wątki po stronie klienta

Sieci komputerowe. Wykład 7: Transport: protokół TCP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Gniazda BSD. Procesy w środowisku sieciowym. Gniazda podstawowe funkcje dla serwera. Gniazda podstawowe funkcje dla klienta

Zakładanie konta

Gniazda BSD. komunikacja bezpołączeniowa

Brinet sp. z o.o. wyłączny przedstawiciel DrayTek w Polsce

Pomoc dla r.

PROTOKOŁY OBSŁUGI POCZTY ELEKTRONICZNEJ

Poniżej znajduje się instrukcja konfiguracji najpopularniejszych programów do obsługi poczty.

Procedura konfiguracji programu Outlook 2003 z wykorzystaniem

Bezpieczny system poczty elektronicznej

Programowanie przy użyciu gniazdek

Java wybrane technologie

INSTRUKCJE UŻYTKOWNIKÓW

Klient poczty elektronicznej - Thunderbird

Wykład 3 / Wykład 4. Na podstawie CCNA Exploration Moduł 3 streszczenie Dr inż. Robert Banasiak

Instrukcja konfigurowania poczty Exchange dla klienta pocztowego użytkowanego poza siecią uczelnianą SGH.

Java Enterprise Edition spotkanie nr 1 (c.d.) JavaMail

Konfiguracja serwerów pocztowych na platformie Tradoro.pl

Procedura konfiguracji programu Outlook Express z wykorzystaniem protokołu POP3

SMB protokół udostępniania plików i drukarek

INSTRUKCJA OBSŁUGI DLA SIECI

KONFIGURACJA KONTA POCZTOWEGO DO POBRANIA WIADOMOŚCI Z OBECNEGO SERWERA POCZTOWEGO. Zespół Systemów Sieciowych

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

Informacje które należy zebrać przed rozpoczęciem instalacji RelayFax.

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

Sieci Komputerowe. Protokół POP3. Protokół IMAP4 Internet Mail Access Protocol version 4. dr Zbigniew Lipiński

Instytut Teleinformatyki

Wybrane działy Informatyki Stosowanej

Instrukcja do panelu administracyjnego. do zarządzania kontem FTP WebAs.

Wiadomości. ZPKSoft Doradca. Wstęp.

Konfiguracja konta pocztowego w Thunderbird

ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2012 POCZTA ELEKTRONICZNA PROTOKÓŁ SMTP PRZYKŁADY KOMUNIKACJI

Instrukcja obsługi serwera FTP v

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

Brinet sp. z o.o. wyłączny przedstawiciel DrayTek w Polsce

Instalacja i konfiguracja serwera SSH.

Sprawozdanie. (notatki) Sieci komputerowe i bazy danych. Laboratorium nr.3 Temat: Zastosowanie protokołów przesyłania plików

Konfiguracja programu pocztowego dla kont w domenie spcsk.pl

Archiwizacja baz MSSQL /BKP_SQL/ opis oprogramowania

1 Moduł Diagnostyki Sieci

Opis komunikacji na potrzeby integracji z systemem klienta (12 kwiecień, 2007)

Serwer SSH. Wprowadzenie do serwera SSH Instalacja i konfiguracja Zarządzanie kluczami

INSTRUKCJA OBSŁUGI KLIENTA POCZTY WWW

Instrukcja instalacji usługi Sygnity Service

Tytuł: Instrukcja obsługi Modułu Komunikacji internetowej MKi-sm TK / 3001 / 016 / 002. Wersja wykonania : wersja oprogramowania v.1.

Skrócona instrukcja konfiguracji skanowania iwysyłania wiadomości

Gniazda UDP. Bartłomiej Świercz. Łódź, 3 kwietnia Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda UDP

Wykład 5: Najważniejsze usługi sieciowe: DNS, SSH, HTTP, . A. Kisiel,Protokoły DNS, SSH, HTTP,

Instrukcja konfiguracji programów pocztowych do obsługi poczty

Krótka instrukcja instalacji

Zadanie1: Odszukaj w serwisie internetowym Wikipedii informacje na temat protokołu http.

Temat: EasyAccess 2.0 Data: 10 Października 2014 Prowadzący: Maciej Sakowicz

Konfiguracja programów pocztowych dla studenckiej poczty elektronicznej

2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego

Instrukcja aktywacji tokena w usłudze BPTP

Programowanie współbieżne i rozproszone

Krótkie wprowadzenie do korzystania z OpenSSL

1. FTP 2. SMTP 3. POP3

Manual konfiguracji konta dla fax2mail opcji BP Basic oraz BP Fiber

Protokoły sieciowe - TCP/IP

Teoretyczne wprowadzenie do programu pocztowego Microsoft Outlook 2007

Manual konfiguracji konta dla fax2mail

Laboratorium 3.4.3: Usługi i protokoły

Dokumentacja smsapi wersja 1.4

SERWER AKTUALIZACJI UpServ

Protokoły zdalnego logowania Telnet i SSH

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej

Instrukcja instalacji i obsługi programu Szpieg 3

Konfiguracja programu MS Outlook 2007 dla poczty w hostingu Sprint Data Center

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15 Artur.Kalinowski@fuw.edu.

Przykładowa konfiguracja konta pocztowego w programie Outlook Express z wykorzystaniem MKS 2k7 (MS Windows 2000 Proessional)

Gniazda surowe. Bartłomiej Świercz. Łódź,9maja2006. Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda surowe

FTP przesył plików w sieci

Instalacja i konfiguracja Symfonia.Common.Server oraz Symfonia.Common.Forte

SERWER AKTUALIZACJI UpServ

Instrukcja korzystania z systemu poczty NetMail (wersja skrócona)

Połączenie VPN Host-LAN SSL z wykorzystaniem przeglądarki. 1. Konfiguracja serwera VPN 1.1. Ustawienia ogólne 1.2. Konto SSL 1.3. Grupa użytkowników

SEGMENT TCP CZ. II. Suma kontrolna (ang. Checksum) liczona dla danych jak i nagłówka, weryfikowana po stronie odbiorczej

Oprogramowanie komunikacyjne dla Internetu rzeczy Laboratorium nr 4 komunikacja unicastowa IPv6

Transkrypt:

Architektura typu klient serwer: uproszczony klient POP3 Wydział Inżynierii Mechanicznej i Informatyki Instytut Informatyki Teoretycznej i Stosowanej dr inż. Łukasz Szustak

Składniki systemu poczty e-mail POP3 System poczty e-mail POP3 składa się z trzech składników: klienta poczty e-mail POP3, usługi SMTP (Simple Mail Transfer Protocol) oraz usługi POP3 Klient poczty e-mail POP3: Oprogramowanie klienta poczty e-mail POP3 służy do czytania oraz redagowania wiadomości e-mail Klient poczty e-mail POP3 pobiera pocztę e-mail z serwera poczty i dokonuje jej transferu na komputer lokalny, aby użytkownik mógł nią zarządzać Klient poczty e-mail POP3 bazuje na protokole POP3

Składniki systemu poczty e-mail POP3 Usługa SMTP: System transferu poczty e-mail, który kieruje wiadomość e-mail od nadawcy do adresata przy użyciu protokołu SMTP Usługa POP3 używa usługi SMTP jako systemu transferu poczty e-mail Wiadomość e-mail jest redagowana przez użytkownika w oprogramowaniu klienta poczty e-mail POP3 Następnie, gdy użytkownik połączy się z serwerem poczty za pośrednictwem Internetu lub połączenia sieciowego, usługa SMTP zabiera wiadomość e-mail i transferuje ją Internetem na serwer poczty adresata

Składniki systemu poczty e-mail POP3 Usługa POP3: System pobierania poczty e-mail, który pobiera pocztę e-mail z serwera poczty na lokalny komputer użytkownika przy użyciu protokołu POP3 Protokół POP3 kontroluje połączenie między klientem poczty e-mail POP3 użytkownika a serwerem, na którym poczta e-mail jest przechowywana

System poczty e-mail POP3

System poczty e-mail POP3 Krok 1: wiadomość e-mail zostaje wysłana pod adres osoba@przykład.com Krok 2: wiadomość e-mail zostaje pobrana przez usługę SMTP i wysłana przez Internet Krok 3: domena poczty e-mail, przykład.com, zostaje rozpoznana jako serwer poczty w Internecie, mailserver1.przykład.com (mailserver1.przykład.com jest serwerem poczty, na którym jest uruchomiona usługa POP3 i który odbiera przychodzącą pocztę e-mail dla domeny poczty e-mail przykład.com) Krok 4: wiadomość e-mail wysłana pod adres osoba@przykład.com zostaje odebrana przez serwer poczty mailserver1.przykład.com Krok 5: wiadomość została przeniesiona do katalogu magazynu poczty, w którym jest przechowywana poczta e-mail kierowana pod adres osoba@przykład.com

System poczty e-mail POP3 Krok 6: użytkownik someone łączy się z serwerem poczty, na którym jest uruchomiona usługa POP3, aby sprawdzić, czy nie przyszła nowa poczta e-mail: protokół POP3 wysyła poświadczenia uwierzytelnienia użytkownika, czyli hasło i nazwę użytkownika someone, następnie usługa POP3 weryfikuje te poświadczenia, a następnie akceptuje lub odrzuca połączenie Krok 7: jeśli połączenie zostaje zaakceptowane, cała poczta e-mail dla użytkownika someone, która jest przechowywana w magazynie poczty, zostaje pobrana/przeniesiona z serwera poczty na komputer lokalny użytkownika someone

Protokół POP3 Protokół POP3 (Post Office Protocol 3) jest standardowym protokołem pobierania poczty e-mail Protokół POP3 kontroluje połączenie między klientem poczty e-mail POP3 a serwerem, na którym poczta e-mail jest przechowywana Usługa POP3 wykorzystuje protokół POP3 do pobierania poczty e-mail z serwera Protokół POP3 ma trzy stany przetwarzania związane z obsługą połączenia między serwerem poczty a klientem poczty e-mail POP3: stan uwierzytelniania stan transakcji stan aktualizacji

Protokół POP3 W stanie uwierzytelniania klient poczty e-mail POP3, który łączy się z serwerem, musi zostać uwierzytelniony, aby użytkownicy mogli pobrać swoją pocztę e-mail Jeśli nazwa użytkownika i hasło podane przez klienta poczty e-mail są takie same jak te na serwerze, użytkownik zostaje uwierzytelniony i przechodzi do stanu transakcji W przeciwnym wypadku użytkownik otrzymuje komunikat o błędzie i nie wolno mu nawiązać połączenia w celu pobrania poczty e-mail Aby zapobiec uszkodzeniom magazynu poczty po uwierzytelnieniu klienta, usługa POP3 zablokowuje skrzynkę pocztową użytkownika

Protokół POP3 Pobranie nowej poczty e-mail, która została dostarczona do skrzynki pocztowej użytkownika po uwierzytelnieniu użytkownika (i zablokowaniu skrzynki pocztowej) nie jest możliwe, dopóki połączenie nie zostanie zakończone Ponadto w danej chwili ze skrzynką pocztową może być połączony tylko jeden klient; dodatkowe żądania połączenia ze skrzynką pocztową są odrzucane W stanie transakcji klient wysyła polecenia POP3, które serwer odbiera i odpowiada na nie zgodnie z protokołem POP3 Wszystkie odebrane przez serwer żądania klienta niezgodne z protokołem POP3 są ignorowane, a użytkownikowi jest odsyłany komunikat o błędzie

Protokół POP3 Stan aktualizacji zamyka połączenie między klientem a serwerem Jest to ostatnie polecenie wysłane przez klienta Po zamknięciu połączenia magazyn poczty zostaje zaktualizowany, aby uwzględnić zmiany wprowadzone w czasie, gdy użytkownik był połączony z serwerem poczty Gdy na przykład pobieranie wiadomości e-mail przez użytkownika zostanie zakończone pomyślnie, pobrana wiadomość e-mail zostaje zaznaczona do usunięcia, a następnie usunięta z magazynu poczty, o ile klient poczty e-mail użytkownika nie jest skonfigurowany, aby stało się inaczej

Przykład sesji POP3 Na kolejnych slajdach przedstawiona jest przykładowa sesja POP3 z serwerem www.poczta.o2.pl, w której klient kolejno: podaje identyfikator użytkownika (user) podaje hasło (pass) prosi o listę oczekujących wiadomości (stat) kopiuję kolejne wiadomości z serwera (retr) kasuje wiadomość po jej ściągnięciu (dele) kończy sesję (quit) Dokładny opis mechanizmu protokołu POP3 można znaleźć w dokumencie RFC 1939 (http://tools.ietf.org/html/rfc1939)

Przykład sesji POP3 C: Probuje znalezc adres IP maszyny: poczta.o2.pl C: Adres poczta.o2.pl to 193.17.41.99 C: Lacze sie z 193.17.41.99:110 C: Polaczony. S: odppowiedz serwera: +OK POP3 poczta.o2.pl Ready C: Logowanie uzytkownika: pipuspcz@o2.pl S: odppowiedz serwera: +OK C: Uwierzytelnianie uzytkownia: pipuspcz@o2.pl S: odppowiedz serwera: +OK C: Zalogowany: pipuspcz@o2.pl C: Sprawdzanie czy sa nowe wiadomosci S: odppowiedz serwera: +OK 1 1513 C: Nowych wiadomosc: 1. Całkowity rozmiar: 1513 C: pobieranie kolejnych wiadomości: S: odppowiedz serwera: +OK <...widaomości...> C: Kończenie sesji... S: odppowiedz serwera: +OK

Komunikacja połączeniowa (SOCK_STREAM) Gniazda: główna koncepcja komunikacji połączeniowej

Uproszczony klient usługi POP3 bazujący na komunikacji połączeniowej Pliki nagłówkowe oraz potrzebne makra #include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netdb.h> #include <string.h> #include <stdio.h> #include <cstdlib> #define USERNAME "pipuspcz@o2.pl" /* nazwa użytkownika POP3 */ #define PASSWORD "pipus1234" /* haslo do skrzynki pocztowej */ #define POPSERV "poczta.o2.pl" /* serwer POP3 */ #define SERVICE "pop-3" /* korzystamy z POP3 */ #define KEEPM /* kasowanie wiadomości */

Uproszczony klient usługi POP3 bazujący na komunikacji połączeniowej Poniższy fragment kodu tworzy gniazdo do komunikacji strumieniowej w domenie Internetowej: zostaną wykorzystane protokoły: IP oraz TCP int main() { int sd, /* deskryptor gniazda */ ret, /* kod powrotu funkcji */ nrmsg = 0; /* ilość nowych wiadomości w skrzynce POP3 */ long int msgsize; /* łączna wielkość nowych wiadomości */ struct sockaddr_in saddr; /* adres gniazda serwera POP3 */ struct servent *srvent; /* struktura zawierająca numer portu POP3 */ struct hostent *sent; /* z tej struktury odczytamy adres IP serwera */ char msgbuf[1024], /* bufor na wiadomosci */ buf[256]; /* bufor na komendy/odpowiedzi protokołu POP3 */ sd = socket (PF_INET, SOCK_STREAM, 0); if (sd < 0) { std::cerr<<"socket()"<<std::endl; return 1; }

Uproszczony klient usługi POP3 bazujący na komunikacji połączeniowej Poniżej została użyta pomocnicza funkcja getservbyname(). Zwraca ona wskaźnik do struktury servent, z której później zostanie odczytany numer portu dla usługi SERVICE ("pop-3") korzystającej z protokołu "tcp" srvent = getservbyname (SERVICE, "tcp"); if (!srvent) { std::cerr<<"getservbyname()"<<std::endl; return 1; }

Uproszczony klient usługi POP3 bazujący na komunikacji połączeniowej Funkcja gethostbyname() zwraca wskaźnik do struktury hostent Na podstawie jedynego argumentu (POPSERV) zostanie sturktura hostnet uzupełniona o potrzebne dane, które umożliwią zamianę domeny serwera POP3 na jego 32-bitowy adres IP Funkcja inet_ntoa() zamieni 32-bitowy adres IP na jego odpowiednik w notacji xxx.xxx.xxx.xxx std::cout<<"probuje znalezc adres IP maszyny: "<<POPSERV<<std::endl; sent = gethostbyname (POPSERV); if (!sent) { std::cerr<<"gethostbyname()"<<std::endl; return 1; } else { in_addr in; memcpy(&in.s_addr, *sent->h_addr_list, sizeof(in.s_addr)); std::cout<<"adres "<<POPSERV<<" to "<<inet_ntoa(in)<<std::endl; }

Uproszczony klient usługi POP3 bazujący na komunikacji połączeniowej W dalszej części programu zostanie wypełniona funkcja struktura sockaddr_in, która jest niezbędna do nawiązania połączenia connect() saddr.sin_family = sent->h_addrtype; saddr.sin_port = srvent->s_port; memcpy((char *) &saddr.sin_addr, sent->h_addr, sent->h_length); in_addr in; memcpy(&in.s_addr, *sent->h_addr_list, sizeof(in.s_addr)); std::cout<<"lacze sie z "<<inet_ntoa(in)<<":"<<ntohs (srvent->s_port)<<std::endl;

Uproszczony klient usługi POP3 bazujący na komunikacji połączeniowej Następnie przy pomocy funkcji connect() następuję połączenie ze zdalnym procesem/serwerem Należy zwrócić uwagę na typ argumentów funkcji, która oczekuje m.in. wskaźnika do struktury sockaddr, a zmienna saddr jest wskaźnikiem do struktury sockaddr_in dlatego też należy odpowiednio zmienić typ (ang. cast) zmiennej saddr Warto sprawdzić, czy funkcja connect() nie zwróciła błędu, gdzie najczęstszymi przyczynami błędu są: nieobecność żadnego procesu nasłuchującego na wybranym porcie zdalnego hosta, brak uprawnień do połączenia się ze zdalnym serwisem oraz wyczerpanie limitu czasowego na połączenie ret = connect (sd, (struct sockaddr *) &saddr, sizeof (saddr)); if (ret < 0) { std::cerr<<"connect()"<<std::endl; return 1; } else { std::cout<<"polaczony.\n"; }

Uproszczony klient usługi POP3 bazujący na komunikacji połączeniowej Kolejne linijki kodu: memset(buf, 0, sizeof (buf)); recv (sd, buf, sizeof (buf), 0); if( chceck (buf) ) return 1; std::cout<<"logowanie uzytkownika: "<<USERNAME<<std::endl; sprintf (buf, "USER %s\r\n", USERNAME); send (sd, buf, strlen (buf), 0); memset(buf, 0, sizeof (buf)); recv (sd, buf, sizeof (buf), 0); if( chceck (buf) ) return 1; std::cout<<"uwierzytelnianie użytkownia: "<<USERNAME<<std::endl; sprintf (buf, "PASS %s\r\n", PASSWORD); send (sd, buf, strlen (buf), 0); memset(buf, 0, sizeof (buf)); recv (sd, buf, sizeof (buf), 0); if( chceck (buf) ) return 1; std::cout<<"zalogowany: "<<USERNAME<<std::endl;

Uproszczony klient usługi POP3 bazujący na komunikacji połączeniowej W celu wymiany informacji ze zdalnym serwerem POP3 zostały użyte funkcje send() oraz recv() Komunikacja odbywa się zgodnie z protokołem POP3 (RFC 1081) Funkcja check sprawdza, czy serwer zwrócił odpowiedź '+OK' na wysłane przez klienta POP3 polecenie: int chceck (char *b) { if (!strncmp (b, "+OK", 3)) { std::cout<<"odppowiedz serwera: "<<b<<std::endl; return 0; } else { std::cerr<<"blad! Serwer zwrocil odpowiedz: "<<b<<" Koniec...\n"; return 1; } } Jeżeli w którymkolwiek momencie utworzonej sesji, serwer wysłał odpowiedź zawierającą na początku wiadomości inny ciąg znaków niż '+OK' to oznacza błąd sesji/komunikacji serwer-klient W takim przypadku należy zakończyć działanie programu

Uproszczony klient usługi POP3 bazujący na komunikacji połączeniowej Jeżeli poprzedni fragment kodu zakończył się powodzeniem, oznacza to że użytkownik został zalogowany na serwerze, jak również będzie mógł przystąpić do pobierania poczty W pierwszej kolejności należy sprawdzić czy na serwerze są nowe wiadomości: std::cout<<"sprawdzanie czy sa nowe wiadomosci..."<<std::endl; sprintf (buf, "STAT\r\n"); send (sd, buf, strlen (buf), 0); memset(buf, 0, sizeof (buf)); recv (sd, buf, sizeof (buf), 0); if( chceck (buf) ) return 1; nrmsg = std::atoi(&buf[4]); msgsize = std::atoi(&buf[6]);

Uproszczony klient usługi POP3 bazujący na komunikacji połączeniowej W pierwszej kolejności zostaje sprawdzone czy dostępne są nowe wiadomości Następnie znajduje się główna pętla odpowiedzialna za pobranie kolejnych wiadomości: if (nrmsg > 0) { std::cout<<"nowych wiadomosc: "<<nrmsg<<". Całkowity rozmiar: "<<msgsize<<std::endl; for (int n = 1; n <= nrmsg; n++) { sprintf (buf, "RETR %i\r\n", n); send (sd, buf, strlen (buf), 0); memset(buf, 0, sizeof (buf)); recv (sd, buf, sizeof (buf), MSG_PEEK); if( chceck (buf) ) return 1;

Uproszczony klient usługi POP3 bazujący na komunikacji połączeniowej W obrębie pętli while pobierane są kolejne części transmitowanej wiadomości wynik tego działania jest zapisany do bufora msgbuf Dwa warunki if służą do odpowiedniego ustawienia zmiennych str, end oraz msg_end Umożliwia to wycięcie z wiadomości komuników, które nie są jej częścią ('+OK' i sekwencja CRLF.CRLF) Wartość zmiennej msg_end zostaje ustawiona na 1 jeśli buforze msgbuf zawarta jest ostatnia część transmitowanej wiadomości (czyli na końcu msgbuf jest tylko CRLF.CRLF) memset(msgbuf, 0, sizeof (msgbuf)); while (recv (sd, msgbuf, sizeof (msgbuf), 0) > 0) { char *str = msgbuf, *end = msgbuf + strlen (msgbuf); int msg_end = 0; if (!strncmp (msgbuf, "+OK", 3)) str = strchr (msgbuf, '\12') + 1; if (!strncmp (msgbuf + strlen (msgbuf) - 5, "\15\12.\15\12", 5)) { end = strrchr (msgbuf, '\12') - 4; msg_end = 1; }

Uproszczony klient usługi POP3 bazujący na komunikacji połączeniowej W dalszej części programu wyświetlany jest kawałek odfiltrowanej wiadomości Jeżeli wiadomość została już cała pobrana wychodzimy z pętli (msg_end==1). std::cout<<str; memset(msgbuf, 0, sizeof (msgbuf)); if (msg_end) { std::cout<<std::endl; break; } } std::cout<<"ok\n";

Uproszczony klient usługi POP3 bazujący na komunikacji połączeniowej Ostatni fragment kodu kasuje pobraną wiadomość (jeśli nie jest zdefiniowane makro KEEPM) Następnie przesyłana jest do serwera POP3 komenda 'QUIT', która kończy sesję oraz kończy działanie programu #ifndef KEEPM std::cout<<"usuwam wiadomosc nr."<<n<<"... "<<std::endl; sprintf (buf, "DELE %i\r\n", n); send (sd, buf, strlen (buf), 0); recv (sd, buf, sizeof (buf), 0); chceck (buf); printf ("Wiadomosc usunieta\n"); #endif } } std::cout<<"zakończenie sesji... "; sprintf (buf, "QUIT\r\n"); send (sd, buf, strlen (buf), 0); recv (sd, buf, sizeof (buf), 0); if( chceck (buf) ) return 1; return 0; }