Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Server Visual studio
Forum - C/C++ - Server Visual studio

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
pocho183 (Normal User)
Rookie


Messaggi: 30
Iscritto: 22/02/2013

Segnala al moderatore
Postato alle 17:53
Venerdì, 08/03/2013
Quando passo i parametri dal prompt, cioè porta e ip, il server smette di funzionare;
ho potuto notare che dipende da ParseCmdLine il quale mi da problemi con port.
Siccome il codice non l'ho fatto io volevo sapere se oltre al port (passo -5000) e ip(-mio.ip) devo passare altri parametri ? potete aiutarmi a farlo funzionare ?


#include <winsock.h>
#include <stdlib.h>
#include <stdio.h>
#define LISTENQ        (1024)
#define MAX_LINE       (1000)

int ParseCmdLine(int argc, char *argv[], char **szPort); //controlla se i parametri passati nel main siano corretti


int main(int argc,char* argv[]){
                #pragma comment(lib, "ws2_32.lib") // Risolve problemi con il Linker tipo LNK2019.
        printf("Avvio server in corso...\n");
        WSADATA   wsaData;
                          struct sockaddr_in target;
        struct sockaddr_in accepted;
        short int port;                  /*  port number               */
        char     *endptr;                /*  for strtol()              */
        int acceptedLen;  // accept scriverà la propria taglia
        char buffer[MAX_LINE];      /*  character buffer          */

            /*  Get command line arguments  */

    ParseCmdLine(argc, argv, &endptr);
    port = strtol(endptr, &endptr, 0);
    if ( *endptr )
    {
       fprintf(stderr, "server: porta non riconosciuta.\n");
       exit(EXIT_FAILURE);
    }
        printf("Server in ascolto sulla porta %d\n",port);

        if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0) {  
        printf("errore in WSAStartup()\n");
        exit(EXIT_FAILURE);
    }

        /* Creo il socket */

        SOCKET sock;
        SOCKET newSock;
        printf("\nCreazione socket in corso...");
        sock=socket(AF_INET, SOCK_STREAM, 0);


        memset(&target, 0, sizeof(target));
        target.sin_family = AF_INET;
        target.sin_addr.s_addr = htonl(INADDR_ANY);  
        target.sin_port = htons(port);
                
        /* Effettuo il bind */

        printf("\nBind in corso...");
        if(bind(sock,(struct sockaddr *)&target, sizeof(target))==-1){
            printf("Errore nel bind");
        }

        /* Mi metto in ascolto */                

if(listen(sock,LISTENQ) ==SOCKET_ERROR) { // listenq sono il numero di connessioni sospese
    printf("server: Errore durante la listen");
    exit(EXIT_FAILURE);
}

                /* Creo un nuovo socket per la connessione del singolo client */

    while(1) {
                printf("\nSono in attesa di una connessione...\n");
                if((newSock = accept(sock, (struct sockaddr *) &accepted, &acceptedLen))!=-1){                             printf("\nErrore: Impossibile creare un nuovo socket!\nConnessione fallita\n");
                }

                /* Primo contatto con il client */

        printf("server: connessione da %s:%d\n", inet_ntoa(accepted.sin_addr),accepted.sin_port);
        do {
        recv(newSock, buffer, MAX_LINE-1,0);
        printf("Messaggio del client=%s\n",buffer);
        } while (strcmp(buffer,"quit")!=0);
        send(newSock, "letto", strlen(buffer),0);
        exit(0);
                }


        /*  Close the connected socket  */

        if ( closesocket(newSock) == SOCKET_ERROR )
        {
            fprintf(stderr, "server: errore durante la close.\n");
            exit(EXIT_FAILURE);
        }

    if ( closesocket(sock) == SOCKET_ERROR )
    {
        fprintf(stderr, "server: errore durante la close.\n");
        exit(EXIT_FAILURE);
    }
    WSACleanup();

}

int ParseCmdLine(int argc, char *argv[], char **szPort)
{
    int n = 1;

    while ( n < argc )
    {
        if ( !strncmp(argv[n], "-p", 2) || !strncmp(argv[n], "-P", 2) )
            *szPort = argv[++n];
        else
            if ( !strncmp(argv[n], "-h", 2) || !strncmp(argv[n], "-H", 2) )
            {
                printf("Sintassi:\n\n");
                printf("    server -p (porta) [-h]\n\n");
                exit(EXIT_SUCCESS);
            }
        ++n;
    }
    if (argc==1)
    {
        printf("Sintassi:\n\n");
        printf("    server -p (porta) [-h]\n\n");
        exit(EXIT_SUCCESS);
    }
    return 0;
}





PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 21:00
Venerdì, 08/03/2013
per carità #pragma è una direttiva per il preprocessore come #include e #define, quindi mettila tra gli #include e i #define non dentro ai metodi! E poi s' è scritto chiaramente che se vuoi usare la porta 5000 non devi scrivere -5000 ma -p 5000

PM Quote
Avatar
pocho183 (Normal User)
Rookie


Messaggi: 30
Iscritto: 22/02/2013

Segnala al moderatore
Postato alle 21:09
Venerdì, 08/03/2013
scrivendo -p5000 mi dice porta non riconosciuta.
da prompt dopo aver aperto il path scrivo server.exe -p5000 -h127.0.0.1
il -h è giusto per l'ip?

PM Quote
Avatar
pocho183 (Normal User)
Rookie


Messaggi: 30
Iscritto: 22/02/2013

Segnala al moderatore
Postato alle 21:16
Venerdì, 08/03/2013
ok dopo che gli passo -p 5001 e -h 127.0.0.1 mi da in output:
Sintassi:

server -p (porta) [-h]  



Come dovrei fare per metterlo in attesa del client, cioè non vedo che passa per il socket, bind ecc.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 21:59
Venerdì, 08/03/2013
ma -h non è per chiedere l' aiuto? Credo tu debba fare 192.168.1.x -p5000 e NON usare il 127.0.0.1, in quanto all' altra domanda non ho voglia di leggere quella roba che non ti sei nemmeno degnato di mettere tra i tag CODE.

PM Quote
Avatar
pocho183 (Normal User)
Rookie


Messaggi: 30
Iscritto: 22/02/2013

Segnala al moderatore
Postato alle 22:51
Venerdì, 08/03/2013
Non l'ho messo nei code perché non so come si fa.

Vabbè che ci vuole a dargli un'occhiata, magari sarà corretto, ma lo interpreto male.

PM Quote
Avatar
pocho183 (Normal User)
Rookie


Messaggi: 30
Iscritto: 22/02/2013

Segnala al moderatore
Postato alle 22:55
Venerdì, 08/03/2013
passandogli prima il mio ip 168. ecc e la porta -p 5001 mi dà in output :
messaggio del client [[[[[[[    
dove le parentesi quadre scorrono all'infinito

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 12:52
Sabato, 09/03/2013
ma guarda che di fianco a dove scrive c' è il pulsante "Code", comunque fai -p5000 -h192.168.1.x e per il server boh, prova a fare le stessa cosa sullo stesso pc

PM Quote
Avatar
pocho183 (Normal User)
Rookie


Messaggi: 30
Iscritto: 22/02/2013

Segnala al moderatore
Postato alle 13:39
Sabato, 09/03/2013
Niente, mi risponde come prima (sintassi: -p (porta) -[h]).
Non riesco a capire perché entra nel parseCmdline, mi va a leggere il printf di sintassi ..., e non entra in socket, bind ecc.
Potrebbe consigliarmi di fare qualcosa?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo