Programy Sieciowy- przystępna teoria C++ // Tworzenie procesów potomnych dla Klienta (podłączanie wielu klientów do jednego serwera) // Telepraca // Strona białego domu zrobiona na drupalu // Opis bibliotek w C++ // Biblioteki programistyczne do pobrania
Przebieg połączenia TCP serwer-klient
#include <iostream.h>
#include <winsock2.h>const unsigned int maxchars = 200; //maximum number of chars for the buffer (i/o)
//The client
void Client()
{
char dest_ip[15]; //destination IP
cout << „Destination IP: „;
cin >> dest_ip;
cout << endl;SOCKET go; //create the sending socket structure
if(go = socket(AF_INET,SOCK_STREAM,0))
cout << „— Sending socket created successfully!n”;
else
{
cout << „Can’t create sending socket! Aborting!n”;
WSACleanup();
exit(0);
}sockaddr_in target;
target.sin_family = AF_INET;
target.sin_port = htons(7979); //sending port
target.sin_addr.s_addr = inet_addr(dest_ip);if(connect(go,(LPSOCKADDR)&target,sizeof(target)) == SOCKET_ERROR)
{
cout << „Can’t connect! Aborting!n”;
WSACleanup();
exit(0);
}
else
{
cout << „— Connected successfully!nn”;
cout << „-| Enter 000 when you want to end the session!nn”;
char buff[maxchars];
while(buff[0] != '0′ || buff[1] != '0′ || buff[2] != '0′)
{
cin.getline(buff,maxchars);
cout << „Enter data: „;
if(buff[0] != '0′ || buff[1] != '0′ || buff[2] != '0′)
send(go,buff,sizeof(buff),0);
else
{
send(go,buff,sizeof(buff),0);
closesocket(go);
cout << „-> Session closed!n”;
WSACleanup();
exit(0);
}
}}
}void Server()
{
SOCKET come;if(come = socket(AF_INET,SOCK_STREAM,0))
cout << „— Receiving socket created successfully!n”;
else
{
cout << „Can’t create receiving socket! Aborting!n”;
WSACleanup();
exit(0);
}sockaddr_in addr; //the address structure for a TCP socket
addr.sin_family = AF_INET; //Address family internet
addr.sin_port = htons(7979); //Receiving port
addr.sin_addr.s_addr = htonl(INADDR_ANY);if(bind(come,(LPSOCKADDR)&addr,sizeof(addr)) == SOCKET_ERROR)
{ //error
cout << „Error binding! Aborting!n”;
WSACleanup(); //unload WinSock
exit(0); //quit
}if(listen(come,1) == SOCKET_ERROR)
{ //error. unable to listen
cout << „Error listening! Aborting!n”;
closesocket(come);
WSACleanup();
exit(0);
}
else
{
SOCKET client; //socket handles to clientsclient = accept(come,NULL,NULL);
if(client == INVALID_SOCKET)
{ //error accepting the connection
cout << „Can’t accept connection! Aborting!n”;
closesocket(come);
WSACleanup();
exit(0);
}
else
{
cout << endl;
char buffer[maxchars]; //buffer for incomming messageswhile(buffer[0] != '0′ || buffer[1] != '0′ || buffer[2] != '0′)
{
buffer[0] = 0;
buffer[1] = 0;
buffer[2] = 0;recv(client,buffer,sizeof(buffer),0);
if(buffer[0] != '0′ || buffer[1] != '0′ || buffer[2] != '0′)
{
if(strlen(buffer) > 0)
cout << „Received: ” << buffer << endl;
}
else
{
closesocket(come);
cout << „-> Session closed!n” << endl;
WSACleanup();
exit(0);
}
}
}
}}
void main()
{
WSADATA w;if(WSAStartup(0x0202,&w))
{
cout << „Can’t initialize WinSock. Aborting!n”;
exit(0);
}
else
cout << „— WinSock initialized successfully!n”;if(w.wVersion != 0x0202)
{ //wrong version
cout << „Wrong version.Aborting!n”;
WSACleanup(); //Unload ws2_32.dll
exit(0);
}
else
cout << „— Version 2.2 accepted!n”;char o;
cout << endl;
while(o != '1′ && o!= '2′ && o != '3′)
{
cout << „1 – Run Servern”;
cout << „2 – Run Clientn”;
cout << „3 – Exitn”;
cout << „Enter 1,2 or 3: „;
cin >> o;
}switch(o)
{
case '1′:
Server();
break;
case '2′:
Client();
break;
case '3′:
exit(0);
break;
};
}
//