Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    103

    [C] connessione Client - Server

    forse la mia domanda non è proprio specifica della programmazione delle reti, ma piuttosto di linguaggio C, però ritengo sia importante capire l'ambito in cui deve essere applicato il controllo.
    Riporto qui di seguito il file di un Client che si collega ad un Server e riceve sul socket una stringa "Hello World".

    #include "basic.h"

    main(int argc, char *argv[])
    {
    int sockfd,n;
    struct sockaddr_in servaddr;
    char buff[MAXLINE];

    if(argc!=2)
    err_quit("Usage: %s <IP address>\n",argv[0]);

    if ( (sockfd = socket(AF_INET, SOCK_STREAM,0)) < 0 )
    err_sys("socket error");

    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr=inet_addr(argv[1]);
    servaddr.sin_port = htons(SERV_PORT);


    if(connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) <0)
    err_sys("connect error");

    while ( (n = read(sockfd, buff, MAXLINE)) > 0 ) {
    buff[n] = 0;
    if (fputs(buff, stdout) == EOF)
    err_sys("errore in fputs");
    }
    if (n < 0)
    printf("errore in read");
    exit(0);
    }
    Ora devo modificare il file in modo che dopo aver ricevuto la stringa deve rispondere con la stringa "Grazie" ovvero i due host si devono sincronizzare.
    Vorrei sapere come faccio a controllare l'ultimo carattere che sta nel socket visto che alla fine di "Hello World" aggiungo un carattere di controllo "\n". Non vorrei utilizzare la readln al posto del while per rendere più generico il controllo, ma vorrei solo isolare l'ultimo carattere del socket.
    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    103
    inserisco anche il codice del serve così è più chiaro


    #include "basic.h"


    main(int argc, char **argv)
    {
    int sockfd, newsockfd, sock_addr_len,n,z;
    char buff[MAXLINE]="Ciao Mondo";
    char buff3[MAXLINE];

    struct sockaddr_in servaddr, cliaddr;

    if ( (sockfd = socket(AF_INET, SOCK_STREAM,0)) < 0 )
    err_sys("socket error");

    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port = htons( SERV_PORT );

    if (bind( sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) <0 )
    err_sys("bind error");

    if ( listen(sockfd,LISTENQ) <0)
    err_sys("lister error");

    while(1){
    sock_addr_len=sizeof(struct sockaddr_in);
    printf("SERVER: Waiting .......\n");
    if ( (newsockfd=accept( sockfd, (struct sockaddr *) &cliaddr, &sock_addr_len)) <0 )
    err_sys("accept error\n");

    printf("Dati client: %s\n",inet_ntoa(cliaddr.sin_addr));

    if( (n=write(newsockfd,buff,strlen(buff)))!=strlen(buf f))
    err_sys("write error");

    write(newsockfd,"\n",1);

    while ( (z = read(newsockfd, buff3, MAXLINE)) > 0 )
    {
    buff3[z] = 0;
    if (fputs(buff3, stdout) == EOF)
    err_sys("errore in fputs");
    }
    close(newsockfd);

    }
    close(sockfd);

    }


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 © 2024 vBulletin Solutions, Inc. All rights reserved.