Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] Server/Client Ottimizzazione

    Salve a tutti, mi è stato assegnato questo "lavoretto", ossia di realizzare un server/client in C che svolgesse le seguenti operazioni.
    Parte server:
    - accettare connessione 1 da client e ricevere stringa da convertire in intero, questo numero rappresenta la porta di un client a cui ci si dovrà connettere
    - ricevere attraverso connessione 1 una stringa, ed elaborarla, eliminando i numeri preceduti da A
    Parte client:
    - connettersi al client di dato IP e n°porta assegnato ed inviare il risultato dell'elaborazione
    - infine inviare ad un terzo client il carattere "q" che indica la fine delle operazioni.

    int sd, new_sd;
    int dim;
    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;
    int client_len = sizeof(client_addr);
    char buffer[10];
    char buffer2[64];
    char mex,
    int result;

    /*PARTE SERVER*/

    addr_initialize(&server_addr, PORT, INADDR_ANY);
    sd = socket(AF_INET, SOCK_STREAM, 0);
    result = bind(sd, (struct sockaddr*) &server_addr, sizeof(server_addr));
    result = listen(sd, MAXCONN);
    new_sd = accept(sd, (struct sockaddr*) &client_addr, &client_len);

    do {
    recv( new_sd, buffer[i], 1, 0);
    i++;
    } while (buffer[i-1] != '\n');

    port2=atoi(buffer);

    /*PARTE 2 SERVER*/
    i=0;

    do {
    recv( new_sd, buffer2[i], 1, 0);
    i++;
    } while (buffer2[i-1] != '\n');


    /* PARTE CONTROLLO */

    i=0;

    while(buffer2[i]=='\n'){
    if(((buffer2[i]>='1')&&(buffer2[i]<='9'))&&(buffer2[i-1]=='A'))){
    c=buffer2[i+1];
    buffer2[i]=c;
    i++;
    }
    else i++;
    }

    /*PARTE CLIENT*/
    sd2 = socket(AF_INET, SOCK_STREAM, 0);
    addr_initialize(&server_addr, port2, inet_addr("IP"));
    result = connect(sd2, (struct sockaddr*) &server_addr, sizeof(server_addr));

    dim=sizeof(buffer2);

    send(sd2, buffer2, dim,0);

    close(sd);

    close(new_sd);

    close(sd2);

    /*PARTE 2 CLIENT*/
    sd3 = socket(AF_INET, SOCK_STREAM, 0);
    addr_initialize(&server_addr, port2, inet_addr("IP"));
    result = connect(sd3, (struct sockaddr*) &server_addr, sizeof(server_addr));

    send(sd3, mex, 1 ,0);

    close(sd3);
    Io ho pensato di sviluppare il tutto in questo modo, vi volevo chiedere se secondo voi il codice può essere ottimizzato, oppure se c'è qualcosa che secondo voi va modificato.
    Grazie


  2. #2
    Con controlli i valori di ritorno di socket, listen, bind ...
    Poi sarebbe meglio leggere più di un byte alla volta ...
    e soprattutto ti sei chiesto se il client invia più di 64 byte ?

  3. #3
    Originariamente inviato da menphisx
    Con controlli i valori di ritorno di socket, listen, bind ...
    Poi sarebbe meglio leggere più di un byte alla volta ...
    e soprattutto ti sei chiesto se il client invia più di 64 byte ?
    Dunque ai controlli avevo pensato e stavo anche pensando di usare la funzione perror, sul fatto di leggere più byte alla volta ho qualche dubbio visto che nn so a priori quanti me ne inviano, ma ho la certezza che siano minori di 64 byte (in ongi caso potrei fare un ciclo che riceve tot. byte per volta..).

    Grazie mille

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