Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Simple Server - Server.cpp

Server.cpp

Caricato da:
Scarica il programma completo

  1. #include <cstdlib>
  2. #include <winsock.h>
  3. #include <windows.h>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
  8. {
  9.  WSAData wsaData;
  10.  
  11. /*
  12. Struttura dell'elemento WSAdata
  13.  
  14. int WSA startup {
  15.     WORD wVersionRequested,
  16.     LPWSADATA lpWSAdata
  17.     }
  18. */
  19.  
  20. WORD wVersionRequested = MAKEWORD(2 , 0); //Specifico la versione della libreria Winsock.h.
  21. int start = WSAStartup(wVersionRequested, &wsaData);
  22.  
  23. //Qui controllo se l'inizializzazione della libreria è andata a buon fine.
  24. if(start != 0) {
  25. MessageBox(0,"Errore nella fase di inizializzazione della libreria winsock.h","WSAdata", MB_OK | MB_ICONERROR);
  26. WSACleanup();
  27. return 0;
  28. }
  29. else {
  30.      MessageBox(0,"Libreria Winsock inizializzata correttamente","WSAdata", MB_OK | MB_ICONINFORMATION);
  31.      }
  32.  
  33. /* struttura della funzione socket
  34. SOCKET socket(int af
  35.                     address_family
  36.                     AF_INET,
  37.                 int type
  38.                     tipo di socket (SOCK_STREAM[TCP])
  39.                 int protocol    
  40.                     protocollo[0]);
  41. */
  42.  
  43. //creo l'oggetto NewSock;
  44. NewSock = socket(AF_INET, SOCK_STREAM, 0);
  45. //verifico la presenza di errori nell'apertura
  46. if(NewSock == INVALID_SOCKET) {
  47.            MessageBox(0,"Errore nella fase di apertura della socket","SOCKET obj",MB_OK | MB_ICONERROR );
  48.            WSACleanup();
  49.            return 0;
  50.            }
  51. else {
  52.      MessageBox(0,"Oggetto socket creato correttamente","SOCKET obj", MB_OK | MB_ICONINFORMATION);
  53.      }
  54.            
  55. /*Funzione bind(), ovvero identifico il socket.
  56. int bind ( SOCKET s
  57.                   Descrizione del socket,
  58.            const struct sockaddr* name
  59.                   indirizzo da assegnare alla socket,
  60.            int namelen
  61.                   lunghezza in byte dle nome);
  62.  
  63. struttura di sockaddr_in
  64. struct sockaddr_in {
  65.          short sin_family;
  66.          u_short sin_port;
  67.          struct in_addr sin_addr;
  68.          char sin_zero[8];
  69.          };
  70. */
  71. //il nome assegnato è "service", di cui poi si calcola la lunghezza in byte.
  72. //int bind(NewSock, (SOCKADDR*)&service, sizeof(service));
  73.  
  74. struct sockaddr_in service;
  75. /*
  76. struct addr_in {
  77.        unsigned long s_addr; (indirizzo internet, ip)
  78.        }
  79. */
  80. //assegno dei valori all'oggetto sockaddr_in [struttura di prima].
  81. service.sin_family = AF_INET; //protocollo
  82. service.sin_port = htons(21); //porta forse.
  83. service.sin_addr.s_addr = INADDR_ANY; //indirizzo di residenza[inet_addr converte la stringa]
  84.  
  85. int Check = bind(NewSock, (struct sockaddr*)&service, sizeof(service));
  86.  
  87. //controllo la presenza di errori
  88. if(Check != 0) {
  89.          MessageBox(0,"Errore durante l'esecuzione della funzione di valorizzazione","bind() function",MB_OK | MB_ICONERROR);
  90.          WSACleanup();
  91.          return 0;
  92.          }
  93. else {
  94.      MessageBox(0,"Funzione bind() eseguita correttamente","bind() function", MB_OK | MB_ICONINFORMATION);
  95.      }
  96.          
  97. /*il server si mette in ascolto e aspetta le connesioni
  98. int listen(SOCKET s, int BACKLOG);
  99. SOCKET s = descrittore del socket
  100. BACKLOG = numero massimo di connessioni in attesa di risposta
  101. */
  102.  
  103. //int listen(NewSock, 1);
  104. int VarListen = listen(NewSock, 1);
  105. if(VarListen != 0) {
  106.          MessageBox(0,"Errore durante la fase di ascolto","listen() function",0);
  107.          WSACleanup();
  108.          return 0;
  109.          }
  110.          
  111. /*Consente le connessioni ai client.
  112. funzione accept(SOCKET s
  113.                        identifica il socket,
  114.                 struct sockaddr* addr
  115.                        riceve l'indirizzo ip del client e lo memorizza in un buffer,
  116.                 int addrlen
  117.                         contiene la lunghezza dell ip che fa la richiest );
  118.                        
  119. restituisce una socket temporanea
  120. */
  121.  
  122. SOCKET AcceptSocket;
  123. struct sockaddr_in AcceptSocket_addr;
  124.  
  125. cout << "Ora il server e' pronto per accettare delle connessioni\n";
  126. int lunghezza = sizeof(struct sockaddr);
  127. for(int i; ;i++) {
  128. AcceptSocket = accept(NewSock, (struct sockaddr*)&AcceptSocket_addr, &lunghezza);
  129. if(AcceptSocket==0) break;
  130. }
  131. NewSock = AcceptSocket;    
  132.  
  133. char msg[] = "Connessione avvenuta corretamente al primo server creato da Luca Tedesco";
  134. send(AcceptSocket,msg,sizeof(msg),0);
  135.  
  136. closesocket(AcceptSocket);
  137. closesocket(NewSock);
  138. WSACleanup();
  139. return 0;
  140. }