Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/socket.h>
- #include <sys/types.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- using namespace std;
- int main(){
- //Input del numero di porta su cui verra' aperta la socket del server
- cout<<"Inserisci la porta da utilizzare: ";
- int port;
- cin>>port;
- //variabili e strutture necessarie per il server
- int sockfd; //descrittore socket
- struct sockaddr_in serverAddr; //struttora per assegnare i parametri alla socket del server es. IP, PORTA...
- //necessarie per il client con le stesse funzioni scritte sopra
- int newSocket;
- struct sockaddr_in newAddr;
- socklen_t addr_size; //Dimenzione indirizzo socket
- char buffer[1024]; //Array di caratteri per ricezione o invio di stringhe
- sockfd = socket(AF_INET, SOCK_STREAM, 0); //inizializzo la socket su TCP/IP
- if(sockfd == -1){ //Se la funzione ritorna -1 significa che è fallita per cui si esce dal programma in errore
- cerr<<"Socket fallita"; //console error
- exit(1);
- }
- cout<<"[+]Server Socket Creata.\n";
- memset(&serverAddr, '\0', sizeof(serverAddr)); //Inizializzo la struttura in memoria che contiene le informazioni della socket
- //Assegno i parametri alle variabili della struttura
- serverAddr.sin_family = AF_INET; //IPv4
- serverAddr.sin_port = htons(port); //Numero porta preso in input sopra
- 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!!!
- //Funzione bind che associa alla socket un indirizzo in modo da essere raggiungibile da un client
- if((bind(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr))) == -1){ //Se ritorna -1 e' in errore per cui esco dal programma
- cerr<<"Bind fallita";
- exit(1);
- }
- cout<<"[+]Bind sulla Port numero "<<port<<endl;
- //listen() mette in ascolto il server sulla socket in attessa di richiesta di connessioni
- if((listen(sockfd, 5)) == -1){ //Se ritorna -1 e' in errore
- cerr<<"Listen fallita";
- exit(1);
- }
- cout<<"[+]Sto ascoltanto...\n";
- newSocket = accept(sockfd, (struct sockaddr*)&newAddr, &addr_size); //accetto la connessione da parte di un client e memorizzo il valore sulla variabile
- if(newSocket == -1){ //Errore
- cerr<<"Accettazione fallita";
- exit(1);
- }
- cout<<"Connessione accetta";
- strcpy(buffer, "Ciao, sono il server"); //Copio la stringa "Ciao (...)" nell'array buffer definito sopra
- send(newSocket, buffer, strlen(buffer), 0); //Invio un messaggio al client contenente la stringa sopra
- cout<<"[+]Sto chiudendo la connessione\n";
- //Chiudo le socket
- close(sockfd);
- close(newSocket);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement