Socket client-server

di il
1 risposte

Socket client-server

Il client invia un messaggio al server. Il server, dopo aver ricevuto il messaggio comunica al client l’avvenuta ricezione.

1 Risposte

  • Re: Socket client-server

    Risolto. Per chi fosse interessato posto il codice.

    ----SERVER----
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <string.h>
    #include <errno.h>
    #include <netdb.h>
    
    #define BACKLOG 5
    
    void error(char *msg)
    {
      perror(msg);
      exit(1);
    }
    
    int main(int argc, char *argv[])
    {
      struct hostent *h;
      int sockfd, new_fd, port, n;
      char recvBuff[254];
      char *msg = "MESSAGGIO RICEVUTO\n";
      struct sockaddr_in my_addr, their_addr;
      
      if(argc<2)
        {
          error("INSERIRE IL NUMERO DI PORTA\n");
        }
      
      port=atoi(argv[1]);
      
      /*      creazione Socket        */
      if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
        {
          error("socket");
        };
    
      /*    inizializzazione della struttura socket      */
    
      bzero((char *) &my_addr, sizeof(my_addr));
      my_addr.sin_family = AF_INET;
      my_addr.sin_port = htons(port);
      my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    
    
    
      /*      Bind        */
      if((bind(sockfd, (struct sockaddr *)&my_addr, sizeof(my_addr))) == -1)
        {
          error("bind");
        };
    
    
    
    
      /*      Listen       */
      if((listen(sockfd,BACKLOG))==-1)
        {
          error("listen");
        }
     
      int sin_size;
      sin_size = sizeof(their_addr);
    
      printf("SERVER AVVIATO\n");
      
    
    
      /*     Accept      */
      while(1)
        {
          if((new_fd = accept(sockfd,(struct sockaddr *)&their_addr, &sin_size))==-1)
    	{
    	  error("accept");
    	}   
    
          printf("Utente: %d connesso\n",getpid());
    
          n = read(new_fd, recvBuff, 254);
          if(n<0) error("read");
          
          printf("Message: %s\n", recvBuff);
          bzero(recvBuff, strlen(recvBuff));
    
          n = write(new_fd, msg, strlen(msg));
          if(n<0) error("write");
    
          close(new_fd);
        } 
      close(sockfd);
      exit(0);
      
    }
    
    
    ----CLIENT----
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include<arpa/inet.h>
    #include <errno.h>
    #include <string.h>
    
    
    void error(char *msg)
    {
      perror(msg);
      exit(1);
    }
    
    int main(int argc, char *argv[])
    {
      int sockfd, port, n;
      char sendBuff[254];
      char recvBuff[254]="";
    
      struct sockaddr_in my_addr;
    
       if(argc<2)
        {
          error("INSERIRE IL NUMERO DI PORTA\n");;
        }
       
       port=atoi(argv[1]);
    
        if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
        {
          error("socket");;
        };
    
       my_addr.sin_family = AF_INET;
       my_addr.sin_port = htons(port);  
       my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    
       if((connect(sockfd,(struct sockaddr *)&my_addr,sizeof(my_addr)))==-1)
         {
           error("connect");
         }
       
       bzero(sendBuff, 254);
       printf("(CLIENT) WRITE A MESSAGE\n");
    
       fscanf(stdin, "%[^\n]", sendBuff),
       
       n = write(sockfd, sendBuff, strlen(sendBuff));
       if(n<0) error("write");
    
       bzero(recvBuff, 254);
        n = read(sockfd, recvBuff, 254);
        if(n<0) error("write");
    
        printf("%s",recvBuff);
       exit(0);
    }
    
    
Devi accedere o registrarti per scrivere nel forum
1 risposte