Problema con le socket

di il
3 risposte

Problema con le socket

Salve a tutti,
mi sono iscritto da poco in questo forum e per questo non so nemmeno se questa sia la sezione adatta per questo post perciò chiedo scusa in anticipo. Sono uno studente di informatica e stò avendo dei problemi con lo studio dei socket per la connessione tcp/ip col modello client/server. Dovrei fare un codice che permetta ad un client di connettersi ad un server, e questo gli restituisca una stringa in maiuscolo inserita precedentemente sul client e alla fine si disconnette. Purtroppo non riesco proprio a capire come funzioni la creazione della socket e cosa faccia il descrittore. Anche seguendo delle lezioni usando file pdf trovati su altri siti non riesco comunque a far partire il mio "codice". Sarei molto grato se qualcuno mi possa dare una mano visto che sono disperato e non so come fare
Grazie in anticipo!!

3 Risposte

  • Re: Problema con le socket

    Ma hai scritto del codice tuo? Mostralo ... mostra gli errori e le difficoltà ...
  • Re: Problema con le socket

    Mi porta già errori sulle righe delle librerie e non ne capisco il motivo. Questo è il codice della parte server:

    #include <sys/types.h>
    #include <netdb.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <ctype.h>
    #include <sys/times.h>
    #include <stdlib.h>
    #include <iostream>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <sys/socket.h>

    using namespace std;

    #define server_port 1313
    #define linesize 80
    void checknum(int in,int out)
    {char inputline[linesize];
    int len;
    len=recv(in, inputline, linesize, 0);
    while(len>0)
    {for(int i=0,i<len,i++)
    {inputline=toupper(inputline);}
    send (out, inputline,len,0);
    len=recv(in,inputline,linesize,0);
    }
    }

    main()
    { int sock, fd, client_len;
    struct sockaddr_in server,client;

    sock= socket(AF_INET, SOCK_STREAM, 0);
    if(sock==-1)
    {cout<<"Chiamata alla system call socket fallita"<<endl;
    exit(1);}

    server.sin_family= AF_INET;
    server.sin_addr.s_addr= htonl(INADDR_ANY);
    server.sin_port= (SERVER_PORT);

    if(bind(sock,(struct sockaddr *)&server, sizeof server) == -1)
    {cout<<"Chiamata alla system call bind fallita"<<endl;
    exit(2);}

    listen(sock,1);

    while(true)
    {client_len= sizeof(client);
    fd= accept(sock,(struct sockaddr *)&client, (soclen_t*) &client_len);
    if(fd<0)
    {cout<<"Stabilimento della connessione"<<endl;
    exit(3);}

    cout<<"Connessione aperta"<<endl;
    cout<<"Ho ricevuto una connessione da un client avente indirizzo IP sorgente "<< inet_ntoa(client.sin_addr);
    cout<<" e numero di porta sorgente "<<client.sin_port<<endl;

    send(fd, "benvenuto all'upperServer!!\n", 27,0);

    upperlines(fd,fd);

    close(fd);
    cout<<"Connessione terminata.\n";
    }
    }

    system("PAUSE");
    return EXIT_SUCCESS;
    }
  • Re: Problema con le socket

    Questa invece è la parte del client:

    #include <netdb.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <ctype.h>
    #include <sys/times.h>
    #include <stdlib.h>
    #include <iostream>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <sys/socket.h>

    using namespace std;

    #define server_port 1313
    #define linesize 80
    void checknum(int in,int out)
    {char inputline[linesize];
    int len;
    len=recv(in, inputline, linesize, 0);
    while(len>0)
    {for(int i=0,i<len,i++)
    {inputline=toupper(inputline);}
    send (out, inputline,len,0);
    len=recv(in,inputline,linesize,0);
    }
    }

    main()
    { int sock, fd, client_len;
    struct sockaddr_in server,client;

    sock= socket(AF_INET, SOCK_STREAM, 0);
    if(sock==-1)
    {cout<<"Chiamata alla system call socket fallita"<<endl;
    exit(1);}

    server.sin_family= AF_INET;
    server.sin_addr.s_addr= htonl(INADDR_ANY);
    server.sin_port= (SERVER_PORT);

    if(bind(sock,(struct sockaddr *)&server, sizeof server) == -1)
    {cout<<"Chiamata alla system call bind fallita"<<endl;
    exit(2);}

    listen(sock,1);

    while(true)
    {client_len= sizeof(client);
    fd= accept(sock,(struct sockaddr *)&client, (soclen_t*) &client_len);
    if(fd<0)
    {cout<<"Stabilimento della connessione"<<endl;
    exit(3);}

    cout<<"Connessione aperta"<<endl;
    cout<<"Ho ricevuto una connessione da un client avente indirizzo IP sorgente "<< inet_ntoa(client.sin_addr);
    cout<<" e numero di porta sorgente "<<client.sin_port<<endl;

    send(fd, "Benvenuto all'upperServer!!\n", 27,0);

    upperlines(fd,fd);

    close(fd);
    cout<<"Connessione terminata.\n";
    }

    system("PAUSE");
    return EXIT_SUCCESS;
    }
Devi accedere o registrarti per scrivere nel forum
3 risposte