Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.65 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <sys/socket.h>
  5. #include <sys/types.h>
  6. #include <netinet/in.h>
  7. #include <arpa/inet.h>
  8. #include <unistd.h>
  9. using namespace std;
  10.  
  11.  
  12. int main(){
  13.     //Input del numero di porta su cui verra' aperta la socket del server
  14.     cout<<"Inserisci la porta da utilizzare: ";
  15.     int port;
  16.     cin>>port;
  17.  
  18.     //variabili e strutture necessarie per il server
  19.     int sockfd; //descrittore socket
  20.     struct sockaddr_in serverAddr; //struttora per assegnare i parametri alla socket del server es. IP, PORTA...
  21.  
  22.     //necessarie per il client con le stesse funzioni scritte sopra
  23.     int newSocket;
  24.     struct sockaddr_in newAddr;
  25.  
  26.     socklen_t addr_size; //Dimenzione indirizzo socket
  27.     char buffer[1024];  //Array di caratteri per ricezione o invio di stringhe
  28.  
  29.     sockfd = socket(AF_INET, SOCK_STREAM, 0); //inizializzo la socket su TCP/IP
  30.     if(sockfd == -1){ //Se la funzione ritorna -1 significa che è fallita per cui si esce dal programma in errore
  31.         cerr<<"Socket fallita"; //console error
  32.         exit(1);
  33.     }
  34.     cout<<"[+]Server Socket Creata.\n";
  35.     memset(&serverAddr, '\0', sizeof(serverAddr)); //Inizializzo la struttura in memoria che contiene le informazioni della socket
  36.  
  37.     //Assegno i parametri alle variabili della struttura
  38.     serverAddr.sin_family = AF_INET; //IPv4
  39.     serverAddr.sin_port = htons(port); //Numero porta preso in input sopra
  40.     serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //Indirizzo di loopback localhost !!!Per connessioni esterne serve un IP diverso, es. quello locale!!!
  41.  
  42.     //Funzione bind che associa alla socket un indirizzo in modo da essere raggiungibile da un client
  43.     if((bind(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr))) == -1){ //Se ritorna -1 e' in errore per cui esco dal programma
  44.         cerr<<"Bind fallita";
  45.         exit(1);
  46.     }
  47.     cout<<"[+]Bind sulla Port numero "<<port<<endl;
  48.  
  49.     //listen() mette in ascolto il server sulla socket in attessa di richiesta di connessioni
  50.     if((listen(sockfd, 5)) == -1){ //Se ritorna -1 e' in errore
  51.         cerr<<"Listen fallita";
  52.         exit(1);
  53.     }
  54.     cout<<"[+]Sto ascoltanto...\n";
  55.  
  56.     newSocket = accept(sockfd, (struct sockaddr*)&newAddr, &addr_size); //accetto la connessione da parte di un client e memorizzo il valore sulla variabile
  57.     if(newSocket == -1){ //Errore
  58.         cerr<<"Accettazione fallita";
  59.         exit(1);
  60.     }
  61.     cout<<"Connessione accetta";
  62.  
  63.     strcpy(buffer, "Ciao, sono il server"); //Copio la stringa "Ciao (...)" nell'array buffer definito sopra
  64.     send(newSocket, buffer, strlen(buffer), 0); //Invio un messaggio al client contenente la stringa sopra
  65.     cout<<"[+]Sto chiudendo la connessione\n";
  66.  
  67.     //Chiudo le socket
  68.     close(sockfd);
  69.     close(newSocket);
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement