Czy moglby ktos sprawdzic co jest nie tak z programem. Łączy sie z serwerem, ale jak sie probuje odebrac poczte to sie wiesza. :-)

#include <windows.h>
#include <commctrl.h>
#include <stdlib.h>
#include <winsock2.h>
#include <stdio.h>
#include <direct.h>

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "WindowsApp";
bool button2aktywny=false, polaczenie=false;
HWND label1,label2,label3,edit1,edit2,edit3,status1,log,button1,button2,button3;
HWND obrys1,obrys2,obrys3,oknoWiad,listaWiad;
WNDPROC listaWiadProc;
HINSTANCE instance;

SOCKET gniazdo;
WSAData wsaData;
struct hostent *host;  // informacje hosta
struct servent *serw;  // informacje serwera 
struct sockaddr_in server_socket;
int ilosc,numer;
char serwer[256],login[256],haslo[256],pom[20];
char buforOdp[256], buforDanych[4096], polecenie[256];
char nazwa[15];

int inicjalizuj(){
     if (WSAStartup(MAKEWORD(2,0),&wsaData) !=0) return -1;
     else return 0;
}
int utworzSocket(){
     gniazdo=socket(PF_INET,SOCK_STREAM,0);
     return (gniazdo);
}
int podlaczDoSerwera(char x[]){
     int a;
     host=gethostbyname(x);
     serw=getservbyname("pop3","tcp");
     if (host==NULL) return -1;
     if (!serw) return -2;
     server_socket.sin_family=host->h_addrtype;
     server_socket.sin_port=serw->s_port;
     memcpy((char *) &server_socket.sin_addr,(host->h_addr),host->h_length);
     if (a=connect(gniazdo,(struct sockaddr*)&server_socket,sizeof(server_socket)) != 0)
         return -3; else return 0;
}    
int rozlacz(){
     while (shutdown(gniazdo,SD_BOTH) !=0) ;
     if (closesocket(gniazdo) !=0) return -1; 
         else return 0; 
}    
int posprzataj(){
    if (WSACleanup() != 0) return -1;
        else return 0;
}
void wyzeruj(char x[]){
    for (int i=0;i<sizeof(x);i++) buforOdp[i]=0;  
}         
int odpowiedz(char x[]){
    if (strncmp(x,"+OK",3)!=0) return -1;
        else return 0;
}
int odbierzOdpSerwera(){
    wyzeruj(buforOdp);
    memset(buforOdp,0,sizeof(buforOdp));
    if (recv(gniazdo,buforOdp,sizeof(buforOdp),0)!=SOCKET_ERROR)
        return odpowiedz(buforOdp); else return -2;    
} 
void wyslijPolecenie(int kod,int nr){
     memset(polecenie,0,sizeof(polecenie));
     switch (kod) {
            case 1:    sprintf(polecenie,"USER %s\n",login);
                  break;
            case 2:    sprintf(polecenie,"PASS %s\n",haslo);
                  break;
            case 3:    sprintf(polecenie,"STAT\n");
                  break;
            case 4:    sprintf(polecenie,"LIST %i\n",nr);
                  break;
            case 5:    sprintf(polecenie,"DELE %i\n",nr);
                  break;
            case 6:    sprintf(polecenie,"RSET\n");
                  break;
            case 7:    sprintf(polecenie,"NOOP\n");
                  break;
            case 8:    sprintf(polecenie,"RETR %i\n",nr);
                  break;
            case 9:    sprintf(polecenie,"QUIT\n");
                  break;
     } 
     send(gniazdo,polecenie,strlen(polecenie),0); 
}
void pobierz(int nr){ 
    int rozm=0,odeb=0,tmp=0;
    HANDLE file;
    DWORD zapisano;
    sprintf(nazwa,"Wiadomosci/wiad%i.txt",nr);
    file=CreateFile(nazwa,GENERIC_WRITE |GENERIC_READ,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    memset(buforOdp,0,sizeof(buforOdp));
    memset(buforDanych,0,sizeof(buforDanych));
    recv(gniazdo,buforOdp,sizeof(buforOdp),MSG_PEEK);
    sscanf (buforOdp,"+OK %d",&rozm);     
    while (rozm!=odeb) {
        tmp=recv(gniazdo,buforDanych,sizeof(buforDanych),0);
        odeb=odeb+tmp;
        WriteFile(file,buforDanych,strlen(buforDanych),&zapisano, NULL);
        if (tmp<strlen(buforDanych)) break;
    }            
    CloseHandle(file);
}
void button1action(){
    if (inicjalizuj()==0) {
        SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"<<< NOWE POŁĄCZENIE >>>");
        if (utworzSocket()!=INVALID_SOCKET)
            if (podlaczDoSerwera(serwer)==0) {
                polaczenie=true;
                SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"Podłączono");
                if (odbierzOdpSerwera()==0) {
                    wyslijPolecenie(1,0);
                    if (odbierzOdpSerwera()==0) {                                               
                        wyslijPolecenie(2,0);
                        if (odbierzOdpSerwera()==0) {
                            EnableWindow(button1,false);
                            EnableWindow(button2,true); //uaktywnienie buttona
                            EnableWindow(button3,true);
                            button2aktywny=true;
                            SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"Zalogowano");
                        } else SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"Podano błędne hasło");
                    } else SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"Podano błędny login");
                } 
            } else SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"Podano błędną nazwę serwera"); 
        else SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"Błąd tworzenia gniazda"); 
    } else SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"Błąd inicjalizacji");       
}
void button2action(){
    LV_ITEM lvi;
    wyslijPolecenie(3,0); 
    if (odbierzOdpSerwera()==0) {
        sscanf(buforOdp,"+OK %d",&ilosc);
        sprintf(pom,"Pobrano %i wiadomości.",ilosc);
        SendMessage(log, LB_ADDSTRING, 0,(LPARAM)pom);
        for (int x=1;x<=ilosc;x++){    
            wyslijPolecenie(4,x);
            if (odbierzOdpSerwera()==0) {                       
                wyslijPolecenie(8,x);                
                pobierz(x);
                sprintf(pom,"Wiadomość %i",x);
                lvi.iSubItem=0;
                lvi.pszText=pom;
                SendMessage(listaWiad,LVM_INSERTITEM,0,(LPARAM)&lvi);
                SendMessage(listaWiad,LVM_SETITEMTEXT ,0,(LPARAM)&lvi);
                sprintf(pom,"%i",x);
                lvi.iSubItem=1;
                lvi.pszText=pom;
                SendMessage(listaWiad,LVM_SETITEMTEXT ,0,(LPARAM)&lvi);
                wyslijPolecenie(7,0);
                if (odbierzOdpSerwera()==0) {
                    EnableWindow(button2,false);
                } else SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"blad noop-a");
            } else SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"blad list-a");
        }
    } else SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"blad stat-a");
}
void button3action(){
    wyslijPolecenie(9,0);
    if (odbierzOdpSerwera()==0) 
        if (rozlacz()==0) 
            if (posprzataj()==0) {
                EnableWindow(button1,true);
                EnableWindow(button2,false);
                EnableWindow(button3,false);
                button2aktywny=false;
                polaczenie=false; 
                SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"Rozłączono i zamknięto sesję");  
            }  else SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"Błąd wsacleanup");
        else SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"Nie mozna zamknac gniazda");
    else {SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"Błąd wylogowania");
    SendMessage(log, LB_ADDSTRING, 0,(LPARAM)buforOdp);}
}
int utworz_kat(){
    HANDLE plik1;
    if( _mkdir( "Wiadomosci" ) == 0 ){
        SendMessage(log, LB_ADDSTRING, 0,(LPARAM)"kat utworzony");
        plik1=CreateFile("Wiadomosci/config.txt",GENERIC_WRITE |GENERIC_READ,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
        CloseHandle(plik1);
    } 
}
void WczytajZPliku(int nr){
     HANDLE file;
     DWORD odczytano=0,x=0;
     sprintf(pom,"Wiadomosci/wiad%i.txt",nr);
     file=CreateFile(pom,GENERIC_WRITE |GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
     x=SetFilePointer(file,0,NULL,FILE_END);
     char b[x];
     SetFilePointer(file,0,NULL,FILE_BEGIN);
     ReadFile(file,b,sizeof(b),&odczytano,NULL);
     SendMessage(oknoWiad, WM_SETTEXT, 0,(LPARAM)b);
     CloseHandle(file);
}

LRESULT CALLBACK WyborWiadomosci (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                 
    {
        case WM_LBUTTONDBLCLK	:
             int i=0,a=0;
             char tmp[64];
             LV_ITEM lvi;
             i=SendMessage(hwnd, LVM_GETNEXTITEM  ,(WPARAM) -1,LVNI_FOCUSED);
             WczytajZPliku(++i);
             break;             
    }
    return CallWindowProc(listaWiadProc, hwnd, message, wParam, lParam);
}
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
{
    instance =    hThisInstance;
    HWND hwnd;               
    MSG messages;            
    WNDCLASSEX wincl;        
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      
    wincl.style = CS_DBLCLKS;                 
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                
    wincl.cbClsExtra = 0;                      
    wincl.cbWndExtra = 0;                      
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    if (!RegisterClassEx (&wincl))
        return 0;
    hwnd = CreateWindowEx (
           0,                   
           szClassName,       
           "Klient POP3         by: Bartosz Jackowski, Dariusz Kamiński",  
           WS_OVERLAPPEDWINDOW, 
           CW_USEDEFAULT,       
           CW_USEDEFAULT,       
           800,                 
           600,                 
           HWND_DESKTOP,        
           NULL,               
           hThisInstance,      
           NULL                 
           );
    ShowWindow (hwnd, nFunsterStil);
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return messages.wParam;
}

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_CREATE: //Utworzenie okna, pol, batonow i labelow
            label1 = CreateWindowEx(0,"STATIC", "Serwer :", WS_CHILD | WS_VISIBLE, 10,10,60,25, hwnd, 0,0, NULL);
            label2 = CreateWindowEx(0,"STATIC", "Login  :", WS_CHILD | WS_VISIBLE, 10,40,60,25, hwnd, 0,0, NULL);
            label3 = CreateWindowEx(0,"STATIC", "Hasło :", WS_CHILD | WS_VISIBLE, 10,70,60,25, hwnd, 0,0, NULL);
            edit1 = CreateWindowEx(WS_EX_CLIENTEDGE	,"EDIT", "", WS_CHILD | WS_VISIBLE, 70,10,300,22, hwnd, 0,0, NULL);
            edit2 = CreateWindowEx(WS_EX_CLIENTEDGE	,"EDIT", "", WS_CHILD | WS_VISIBLE, 70,40,300,22, hwnd, 0,0, NULL);
            edit3 = CreateWindowEx(WS_EX_CLIENTEDGE	,"EDIT", "", ES_PASSWORD |WS_CHILD | WS_VISIBLE, 70,70,300,22, hwnd, 0,0, NULL);
            button1 = CreateWindowEx(0,"BUTTON", "Połącz", WS_CHILD | WS_VISIBLE, 390,10,150,25, hwnd, 0,0, NULL);
            button2 = CreateWindowEx(0,"BUTTON", "Odbierz pocztę", WS_CHILD | WS_VISIBLE | WS_DISABLED, 390,40,150,25, hwnd, 0,0, NULL);
            button3 = CreateWindowEx(0,"BUTTON", "Rozłącz", WS_CHILD | WS_VISIBLE | WS_DISABLED, 390,70,150,25, hwnd, 0,0, NULL);
            InitCommonControls();
            //listaWiad = CreateWindowEx(WS_EX_CLIENTEDGE	,"EDIT", "", ES_MULTILINE |WS_VSCROLL | WS_HSCROLL |WS_CHILD | WS_VISIBLE, 20,150,260,160, hwnd, 0,0, NULL);
            oknoWiad = CreateWindowEx(WS_EX_CLIENTEDGE	,"EDIT", "", ES_MULTILINE |WS_VSCROLL | WS_HSCROLL |WS_CHILD | WS_VISIBLE, 330,150,440,360, hwnd, 0,0, NULL);
            log = CreateWindowEx(WS_EX_CLIENTEDGE,"LISTBOX", 0, WS_VSCROLL | WS_HSCROLL | WS_CHILD | WS_VISIBLE, 20,360,260,160, hwnd, 0,0, NULL);
            
            obrys1 = CreateWindowEx(0,"BUTTON", "Lista Wiadomości", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 10,130,280,190, hwnd, 0,0, NULL);
            obrys2 = CreateWindowEx(0,"BUTTON", "Treść Wiadomości", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 320,130,460,390, hwnd, 0,0, NULL);
            obrys3 = CreateWindowEx(0,"BUTTON", "LOG", WS_CHILD | WS_VISIBLE | BS_GROUPBOX	, 10,340,280,180, hwnd, 0,0, NULL);
            
            listaWiad= CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, 
                        NULL, WS_CHILD | WS_VISIBLE | LVS_REPORT, 
                        20,150,260,160, hwnd, NULL, instance, NULL);
            listaWiadProc=(WNDPROC) SetWindowLong(listaWiad,GWL_WNDPROC,(DWORD)WyborWiadomosci);
            LV_COLUMN lvc;
            lvc.mask =  LVIF_IMAGE | LVCF_TEXT ;
            lvc.fmt = LVCFMT_LEFT; 
            lvc.cx = 150; 
            lvc.pszText = "Wiadomosc";   
            ListView_InsertColumn(listaWiad, 0, &lvc);
            lvc.cx = 100; 
            lvc.pszText = "Numer";
            ListView_InsertColumn(listaWiad, 1, &lvc);
                        
            utworz_kat();        
            break;
        
        case WM_SIZE:
             MoveWindow(status1,0,HIWORD(lParam)-50,LOWORD(lParam),50,TRUE);
             break;     
            
        case WM_COMMAND:       
             if ((HWND)lParam == button1){ 
                   //  sprawdzenie czy sa podane dane
                   SendMessage(edit1, WM_GETTEXT, 256,(LPARAM)serwer);
                   SendMessage(edit2, WM_GETTEXT, 256,(LPARAM)login);
                   SendMessage(edit3, WM_GETTEXT, 256,(LPARAM)haslo);
                   if (strcmp(serwer,"")==0){
                                MessageBox(0,"Wpisz serwer.","Blad",MB_OK);
                                break; 
                   }     
                   if (strcmp(login,"")==0){
                                MessageBox(0,"Wpisz login.","Blad",MB_OK);
                                break;
                   }                                                
                   if (strcmp(haslo,"")==0){
                                MessageBox(0,"Wpisz haslo.","Blad",MB_OK);
                                break;
                   }  
                   MessageBox(0,"Trwa logowanie.\nProsze być cierpliwym :P","Uwaga!",MB_OK|MB_ICONINFORMATION);                    
                   button1action();
             }    
             if ((HWND)lParam == button2){ 
                   MessageBox(0,"Trwa pobieranie wiadomości.\nTrzeba jeszcze więcej cierpliwości :P","Uwaga!",MB_OK|MB_ICONINFORMATION);           
                   button2action();   
             }
             if ((HWND)lParam == button3){ 
                   MessageBox(0,"Dziekujemy za skorzystanie\n z naszego programu.","Uwaga!",MB_OK|MB_ICONINFORMATION);
                   button3action();  
             }               
             break;  
             
        case WM_DESTROY:
            PostQuitMessage (0);      
            break;  
              
        default:                      
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}