WinSock2 C++ nie uzyskuję poprawnego IP klienta

0

Witam.
Utworzyłem aplikację SERWER oraz CLIENT. Obie aplikacje posiadają konsolę do nawiązywania połączenia. Dodatkowo SERWER posiada LIST_BOXA z połączonymi klientami.

  1. Serwer włącza się następującymi komendami:
    a) connect
    b) <adres ip="ip"> np. 192.168.0.1 (musi być prawidłowym adresem w sieci lokalnej)
    c) Na koniec można wyłączyć serwer komendą disconnect
  2. Klienta łączymy z serwerem
    a) connect
    b) <adres ip="ip"> np. 192.168.0.1 (taki sam jak adres serwera)
    Do rzeczy:
    Po połączeniu klienta z serwerem serwer otrzymuje wiadomość w konsoli „Klient <ip> connected” oraz dodawany jest element do listboxa o nazwie <IP> klienta. Problem w tym, że nie uzyskuje poprawnych adresów IP klientów.
    =============
    Adres IP uzyskuję w nastepujący sposób:
  3. W konsoli:
 
struct sSERWER
{
    WSADATA wsaDATA;
    SOCKET mainSocket, acceptSocket;
    sockaddr_in service;
    vector <SOCKET> vKlient_socket;
    vector <sockaddr_in> vKlient_adress;
};
struct sSERWER SERWER;
case FD_ACCEPT:{
                    sockaddr_in sin2;
                    SERWER.acceptSocket = accept(SERWER.mainSocket, (struct sockaddr*)&sin2, NULL);
                    SERWER.vKlient_socket.push_back(SERWER.acceptSocket);
                    SERWER.vKlient_adress.push_back(sin2);
                    odswiez_liste();

                    string wiadomosc = "Klient: ";
                    wiadomosc+= inet_ntoa(sin2.sin_addr);
                    wiadomosc+= " connected.\r\n";
                    odswiez_konsole(wiadomosc.c_str());
                    wiadomosc.clear();
                    SERWER.acceptSocket = SOCKET_ERROR;
                    break;
                }
 
  1. oraz w listboxie
 
    SendMessage(hLista, LB_DELETESTRING, 0, 0);
    char* IP = NULL;

    for(int n=0; n<(int)SERWER.vKlient_adress.size(); n++)
    {
        IP = inet_ntoa(SERWER.vKlient_adress[n].sin_addr);
        SendMessage(hLista, LB_ADDSTRING, 0, (LPARAM)IP);
    }

Dla przykładu wyniki Serwera i Klienta z konsol:
SERWER_IP = 25.68.36.252
CLIENT_IP = 25.21.195.71
PORT = 27015

SERWER
======= HELLO ! ! ! =======

Tworzenie serwera:

  • Podaj IP serwera:
    Inicjalizacja zakonczona !
    Utworzono gniazdo !

Proba utworzenia serwera:
IP: 25.68.36.252:27015
Serwer utworzony !
Rozpoczeto nasluchiwanie !
Klient: 0.2.0.0 connected.
Klient

CLIENT IS STARTING

Podaj IP serwera . . .
connected

Jeśli potrzebujecie jakies dodatkowych informacje piszcie. w załączniku umieszczam pełny kod serwera i klienta

0

Dodałem tylko:

 
int Dlugosc = sizeof(sin2);
SERWER.acceptSocket = accept(SERWER.mainSocket, (struct sockaddr*)&sin2, &Dlugosc);

Dzięki wielkie chłopie :D

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