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.
-
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 -
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: - 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;
}
- 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