Programowanie sieciowe (klient + serwer) C++
Program w C++, kod źródłowy 2 programów: serwera nasłuchującego i klienta. W komentarzach znajdują się objaśnienia do kodu. Aplikacja działa na adresie IP 127.0.0.1.
Skompilowany program do pobrania [serwer i klient]
//połączeniowy server
//połączeniowy klient
//połączeniowy server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #include <iostream.h> #include <winsock2.h> #include <conio.h> #define ROZMIAR_BUFORA_WIADOMOSCI 10 #define winSock_ver MAKEWORD(2,0) int main( void ) { WSADATA CurrentSockVer; SOCKET s,nowy_s; struct sockaddr_in ServerAdress,KlientAdress; char *wiadomosc= "Tu serwer\n" , *adres= "127.0.0.1" , bufor_wiadomosci[ROZMIAR_BUFORA_WIADOMOSCI], *wskaznik_do_bufora; int dlugosc_bufora_wiadomosci,i; cout<< "Serwer aplikacji testowej wystartowal !!!" <<endl; cout<< "Inicjacja biblioteki winsock" <<endl; //inicjacja biblioteki winsock WSAStartup(winSock_ver,&CurrentSockVer); cout<< "Tworzymy gniazdko" <<endl; //tworzymy gniazdo s=socket(AF_INET,SOCK_STREAM,0); //ustawienie adresu serwera ServerAdress.sin_family=AF_INET; ServerAdress.sin_port=htons(2000); ServerAdress.sin_addr.s_addr=inet_addr(adres); cout<< "Przywiazujemy adres do gniazda" <<endl; //przywiazujemy adres serwera do gniazda bind(s, ( struct sockaddr*)&ServerAdress, sizeof (ServerAdress)); cout<< "Zaczynamy nasluchiwanie" <<endl; //zaczynamy naslychiwac polaczen listen(s,1); //1 oznacza ze gniazgo s osluzy tylko 1 klienta i= sizeof (KlientAdress); //akceptujemy nadchodzace polaczenie //nowy_s jest to utworzone gniazdo przez ktore bedziemy sie komunikowac nowy_s=accept(s,( struct sockaddr*)&KlientAdress,&i); cout<< "Akceptacja polaczenia" <<endl; wskaznik_do_bufora=bufor_wiadomosci; dlugosc_bufora_wiadomosci=ROZMIAR_BUFORA_WIADOMOSCI; cout<< "Odbieramy dane od serwera" <<endl; //odbieramy wiadomosc od klienta recv(nowy_s,wskaznik_do_bufora,dlugosc_bufora_wiadomosci,0); for ( int i=0;i<ROZMIAR_BUFORA_WIADOMOSCI;i++) cout<<*(bufor_wiadomosci+i); cout<< "Wysylamy dane od klienta" <<endl; //wysylamy wiadomosc do klienta send(nowy_s,wiadomosc, strlen (wiadomosc),0); cout<< "Zamykamy 2 gniazda" <<endl; //zamykamy gniazdka closesocket( nowy_s); closesocket( s ); //posprzatanie po winsock cout<< "Sprzatamy po winsock" <<endl; WSACleanup(); getch(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <iostream.h> #include <winsock2.h> #include <conio.h> #define ROZMIAR_BUFORA_WIADOMOSCI 10 #define winSock_ver MAKEWORD(2,0) int main( void ) { //deklarujemy zmiene WSADATA CurrentSockVer; SOCKET s; struct sockaddr_in ServerAdress; char *wiadomosc= "Tu klient\n" , *adres= "127.0.0.1" , bufor_wiadomosci[ROZMIAR_BUFORA_WIADOMOSCI], *wskaznik_do_bufora; int dlugosc_bufora_wiadomosci; cout<< "Klient aplikacji testowej wystartowal !!!" <<endl; cout<< "Inicjujemy biblioteke winsock !!!" <<endl; //inicjacja biblioteki winsock WSAStartup(winSock_ver,&CurrentSockVer); cout<< "Tworzymy gniazdo !!!" <<endl; //tworzymy gniazdo s=socket(AF_INET,SOCK_STREAM,0); //ustawienie adresu serwera ServerAdress.sin_family=AF_INET; ServerAdress.sin_port=htons(2000); ServerAdress.sin_addr.s_addr=inet_addr(adres); cout<< "Nawiazujemy polaczenie z serwerem !!!" <<endl; //nawiazujemy połączenie z serwerem if (connect(s, ( struct sockaddr *)&ServerAdress, sizeof (ServerAdress))==0) { cout<< "Wysylamy wiadomosc do serwera !!!" <<endl; //wysyłamy wiadomosc do SERWERA send(s,wiadomosc, strlen (wiadomosc),0); wskaznik_do_bufora=bufor_wiadomosci; dlugosc_bufora_wiadomosci=ROZMIAR_BUFORA_WIADOMOSCI; cout<< "Odbieramy wiadomosc od serwera !!!" <<endl; //odbieramy komunikat od serwera recv(s,wskaznik_do_bufora,dlugosc_bufora_wiadomosci,0); //wyswietlamy otrzymaną wiadomosc for ( int i=0;i<ROZMIAR_BUFORA_WIADOMOSCI;i++) cout<<*(bufor_wiadomosci+i); cout<< "Zamykamy polaczenie z serwerem !!!" <<endl; //zamkniecie polaczenia closesocket(s); //posprzatanie po winsock cout<< "Sprzatamy po winsock !!!" <<endl; WSACleanup(); } getch(); } |
Dział: