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
 

#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();
}


//połączeniowy klient

#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ł: