Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, WinSock] Protokół GG i "Pusta" Odpowiedź

Ostatnio zmodyfikowano 2013-01-29 21:51
Autor Wiadomość
krystian11102
Temat założony przez niniejszego użytkownika
[C++, WinSock] Protokół GG i "Pusta" Odpowiedź
» 2013-01-29 19:48:02
Witam. Chciałbym napisać prosty klient GG, tylko gdy łącze się z Serwerem to otrzymuje "Pustą" Odpowiedź. Korzystam stąd: http://toxygen.net/libgadu/protocol/

A oto mój kod:
C/C++
#include <windows.h>
#include <winsock.h>
#include <string>
#define POLACZ 100
using namespace std;
LPSTR NazwaKlasy = "Klasa Okienka";
MSG Komunikat;
WSADATA wsaData;
SOCKADDR_IN saddr;
SOCKET sock;
char * http_req = "GET /appsvc/appmsg_ver8.asp?fmnumber=222222&lastmsg=0&version=1.0.0.0 HTTP/1.1\n\nConnection: Keep-Alive\n\nHost: appmsg.gadu-gadu.pl\n\n";
char index[ 1000 ];

HWND edit;


u_long resolveHost( const string & host )
{
    LPHOSTENT hostEntry = gethostbyname( host.c_str() );
   
    if( !hostEntry )
    {
        unsigned int addr = inet_addr( host.c_str() );
        hostEntry = gethostbyaddr(( char * ) & addr, 4, AF_INET );
       
        if( !hostEntry )
        {
            return 0;
        }
    }
   
    return *(( int * ) * hostEntry->h_addr_list );
}






LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
   
   
    // WYPEŁNIANIE STRUKTURY
    WNDCLASSEX wc;
   
    wc.cbSize = sizeof( WNDCLASSEX );
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
    wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
    wc.lpszMenuName = NULL;
    wc.lpszClassName = NazwaKlasy;
    wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
   
    // REJESTROWANIE KLASY OKNA
    if( !RegisterClassEx( & wc ) )
    {
        MessageBox( NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...",
        MB_ICONEXCLAMATION | MB_OK );
        return 1;
    }
   
    // TWORZENIE OKNA
    HWND hwnd;
   
    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "blabla", WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 240, 400, NULL, NULL, hInstance, NULL );
    //################################| KONTROLKI |###################################
   
   
    edit = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL, 10, 10, 200, 200, hwnd, NULL, hInstance, NULL );
   
    CreateWindowEx( NULL, "BUTTON", "Połącz", WS_CHILD | WS_VISIBLE, 10, 250, 150, 30, hwnd,( HMENU ) POLACZ, hInstance, NULL );
   
   
   
    //################################################################################
    if( hwnd == NULL )
    {
        MessageBox( NULL, "Okno odmówiło przyjścia na świat!", "Ale kicha...", MB_ICONEXCLAMATION );
        return 1;
    }
   
    ShowWindow( hwnd, nCmdShow ); // Pokaż okienko...
    UpdateWindow( hwnd );
   
    // Pętla komunikatów
    while( GetMessage( & Komunikat, NULL, 0, 0 ) )
    {
        TranslateMessage( & Komunikat );
        DispatchMessage( & Komunikat );
    }
    return Komunikat.wParam;
}

// OBSŁUGA ZDARZEŃ
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
    case WM_CLOSE:
        DestroyWindow( hwnd );
        break;
    case WM_COMMAND:
        switch( wParam )
        {
        case POLACZ:
            WSADATA WSAData;
            WSAStartup( MAKEWORD( 2, 0 ), & WSAData );
           
            char buffer[ 1000 ];
            sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
            memset(( void * ) & saddr, 0, sizeof( saddr ) );
            saddr.sin_addr.s_addr = inet_addr( "91.214.237.11" );
            saddr.sin_family = AF_INET;
            saddr.sin_port = htons( 8074 );
           
            if( connect( sock,( sockaddr * ) & saddr, sizeof( sockaddr ) ) == SOCKET_ERROR )
            {
                /* połączenie się nie powiodło */
                MessageBox( NULL, "Error", "bad", MB_OK );
                sock = NULL;
                return - 1;
            }
           
            send( sock, http_req, strlen( http_req ), 0 );
            char * buforxd;
            recv( sock, index, 1000, 0 );
            MessageBox( NULL, index, "blablabla", MB_OK );
            SetWindowText( edit, index );
            closesocket( sock );
            WSACleanup();
            break;
        }
        break;
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
       
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
   
    return 0;
}

Co zrobić, aby poprawnie się połączyć ?
P-75333
krzyk
» 2013-01-29 20:15:56
nie analizowałem kodu ale zauważyłem błąd "\n\n" powinno być "\r\n",a na końcu powinno być to dwa razy.

//EDIT
sprawdziłem i zwróciło mi takie coś:
HTTP/1.1 200 OK
Date: Tue, 29 Jan 2013 19:21:39 GMT
Connection: close

0 0 91.214.237.77:8074 91.214.237.77
P-75336
krystian11102
Temat założony przez niniejszego użytkownika
» 2013-01-29 20:32:36
Takie coś właśnie powinno zwrócić .. :) Zmieniłem "\n\n" na "\r\n" i na końcu dałem "\r\n\r\n" Ale nadal otrzymuje "Pustą" odpowiedź... :( Ktoś może wie dlaczego tak się dzieje ?
P-75339
krzyk
» 2013-01-29 21:18:04
spróbuj tego ip 91.197.13.152
P-75345
krystian11102
Temat założony przez niniejszego użytkownika
» 2013-01-29 21:51:26
Niestety nie może się połączyć :(
P-75346
« 1 »
  Strona 1 z 1