Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [C] Client e Server

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    211

    [C] Client e Server

    Volevo chiedere aiuto su un errore che ho quando provo a lanciare un semplice server e client su Linux. Spero di non aver sbagliato sezione, altrimenti correggo subito.

    I codici utilizzati sono:

    server.c
    codice:
    #include <stdio.h>#include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <time.h>
    int main(int argc, char **argv)
    {
      int          ncon=0,listenfd, connfd;
      struct sockaddr_in  servaddr;
      char        buff[4096];
      time_t        ticks;  
      if ( ( listenfd = socket(AF_INET, SOCK_STREAM, 0) ) < 0 ) {
        perror("socket");
        exit(1);
        }
      servaddr.sin_family      = AF_INET;
      servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
      servaddr.sin_port        = htons(1024);
      if ( bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0 ) {
        perror("bind");
        exit(1);
      }
      if ( listen(listenfd, 1024) < 0 ) {
        perror("listen");
        exit(1);
      }
    for ( ; ; ) {
        if ( ( connfd = accept(listenfd, (struct sockaddr *) NULL, NULL) ) < 0 ) {
          perror("accept");
          exit(1);
        }
        ticks = time(NULL);
        snprintf(buff, sizeof(buff), "Sei il client numero %d , %.24s\r\n", ncon,ctime(&ticks));
        if ( write(connfd, buff, strlen(buff)) != strlen(buff)) {
          perror("write");
          exit(1);
        }
        close(connfd);
        ncon++;
      }
    }
    client.c
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    
    
    int main(int argc, char **argv)
    {
      int                sockfd, n;
      char               recvline[1025] ;
      struct sockaddr_in servaddr;
      if (argc != 2) {
        fprintf(stderr,"usage: %s <IPaddress>\n",argv[0]);
        exit (1);
      }
      if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        fprintf(stderr,"socket error\n");
        exit (1);
      }
        servaddr.sin_family = AF_INET;
        servaddr.sin_port   = htons(1024);
        if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) < 0) {
          fprintf(stderr,"inet_pton error for %s\n", argv[1]);
          exit (1);
        }
      
      if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) {
        fprintf(stderr,"connect error\n");
        exit(1);
      }
      while ( (n = read(sockfd, recvline, 1024)) > 0) {
        recvline[n] = 0;
        if (fputs(recvline, stdout) == EOF) {
          fprintf(stderr,"fputs error\n");
          exit(1);
        }
      }
      if (n < 0) {
        fprintf(stderr,"read error\n");
        exit(1);
      }
      exit(0);
    }
    Quando lancio il server tramite linea di comando parte, ma quando lancio anche il client va in loop e si ferma al Connect Error...Non credo che sia un errore di codice siccome dal pc di un altro mio amico funziona tutto correttamente con i file identici.

    Qualcuno sa darmi qualche dritta per risolvere? Ringrazio anticipatamente per l'aiuto.

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    per il client l'indirizzo IP è localhost (127.0.0.1) vero?

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    211
    Si, li lancio sulla stessa macchina entrambi...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,337
    Controlla con il comando netstat se il sistema è in ascolto sulla porta 1024
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    211
    Ho dato il comando netstat ma mi esce una sfilza di valori e credo di non aver letto la porta 1024, c'è il comando specifico per avere il risultato solo della porta 1024?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,337
    Usa

    netstat -l

    per controllare solo le connessioni in ascolto
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    211
    Grazie per l'interessamento, ho bisogno di risolvere.

    Lanciando quel comando credo che la riga che m'interessi sia questa giusto?

    codice:
    tcp        0      0 0.0.0.0:1024            0.0.0.0:*               LISTEN

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,337
    Giusto. Assicurati che quella linea compaia solo quando hai lanciato il server e che non ci sia se il server non è in esecuzione.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    211
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Giusto. Assicurati che quella linea compaia solo quando hai lanciato il server e che non ci sia se il server non è in esecuzione.
    Se non eseguo il server non mi appare quella riga.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,337
    Ok e se è attivo il server ed esegui

    telnet 127.0.0.1 1024

    ottieni una connessione?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.