Problema Applicazione Client Server c++

di il
21 risposte

21 Risposte - Pagina 2

  • Re: Problema Applicazione Client Server c++

    Seguirò il tuo consiglio, grazie! In ogni modo, con il tuo codice ho ovviato a occasioni in cui la recv() andasse in errore anche dopo esito "positivo" della accept. Tuttavia il problema di fondo non si è eliminato, ma credo sia un problema inerente il modulo, giacché se eseguo il client su un altro PC anziché sul modulo va tutto ok.

    Specifico una cosa: del while non avrei bisogno, giacché devo svuotare (periodicamente) sulla TCP/IP un buffer che vado (periodicamente) a riempire (sfruttando una funzione che ho già elaborato e che andrò poi ad aggiungere) dalla porta seriale del modulo, diciamo in questo caso il buffer contenente "respiri piano...ecc...".

    Tuttavia ora che eseguo sul modulo... la connect() al client continua a dare -1. Quindi inessuna connessione, nessun invio di dati.
    Tuttavia col codice che ora ti propongo, in cui ho messo dei cicli per fargli fare sempre dei tentativi di invio succede che: la connect() al client continua a dare -1 e quindi anche la send().Intanto il server rimane in attesa senza riuscire ad eseguire la accept()... dopo qualche secondo la accept() da esito positivo (come fa se la connect da errore?!?! bah) e quindi riesco a ricevere correttamente i dati del buffer.
    In pratica tutto ciò è come se riuscisse ad avvenire solo forzando gli invii attraverso numerosi tentativi: ci sto perdendo la testa.
    CLIENT:
    char buffer[200]="respiri piano per non far rumore ti addormenti di sera e ti risvegli col sole. sei chiara come un'alba, sei fresca come l'aria.";
        int bytesSent;
    
        while(1)
        {
            bytesSent = strlen(buffer) + 1;
            bytesSent=send(clientsocket, buffer, bytesSent , 0);
    	    if(bytesSent!=-1)
            printf("sent:%d\n",bytesSent);
        }
    
        printf("GoodBye\n");
        closesocket(clientsocket);
    SERVER:
    printf ("remote socket= %d.\n", remoteSocket);
        printf ("Connessione al client (IP: %s; PORTA: %d) avvenuta con successo",inet_ntoa(Client_addr.sin_addr),ntohs(Client_addr.sin_port));
        printf ("\nremote socket= %d.\n", remoteSocket);
    
    //    while (1)  //HO OSCURATO IL WHILE
    //    {
            rec=recv(remoteSocket, buffer, sizeof(buffer), 0);
            if (rec == SOCKET_ERROR)
            {
                printf("\n error on message\n");
         //       continue;
            }
    
            printf("\n Messaggio:");
            printf("%s",buffer);
            printf("\n");
    
    
    /*    if ( !strcmp(buffer,"exit") ) break;
        }*/
        WSACleanup();
        system("pause");
        return 0;
    }
  • Re: Problema Applicazione Client Server c++

    Non è che il modulo ha qualche firewall?
    sicuro che il modulo ha un ip fisso?
    che compilatore usi per il client?
    riesci a farmi avere l'header della socket che usi sul client? puoi anche postarla se non è troppo lunga.
  • Re: Problema Applicazione Client Server c++

    Il modulo ha di sicuro un IP fisso. Il firewall... non lo so per certo, ho contattato il produttore ed attendo che mi risponda. Tuttavia se avesse un firewall non dovrebbe mai consentirmi di inviare, nemmeno dopo ciclici tentativi di invio, non credi?
  • Re: Problema Applicazione Client Server c++

    • Interface "enet0":
      Ip address 169.254.142.2
      Netmask 255.255.255.0
      Gateway N/A
      MAC: fc:af:6a:00:0b:d3

      Primary DNS N/A
      Secondary DNS N/A
      DNS timeout 10
      Mailhost N/A
    Questa è la ipconfig fatta sul modulo.
  • Re: Problema Applicazione Client Server c++

    vbextreme ha scritto:


    riesci a farmi avere l'header della socket che usi sul client? puoi anche postarla se non è troppo lunga.
    Caro vbextreme, grazie al tuo fondamentale contributo (anche psicologico, cosicché mi abbia fatto desistere dal buttare tutto per aria) il problema è risolto.

    Ho settato anche DNS e gateway ed in più, soprattutto, ho aggiunto un flag accanto alla ipconfig necessario per accelerare l'inizializzazione della socket. Senza il flag, la inizializzazione si ritardava, per cui ecco spiegato perché ci voleva qualche secondo affinché la accept desse esito positivo, mentre il client, che non aveva indicazioni di aspettare, intanto non aveva i requisiti per dare esito positivo alla connect().

    Ti ripeto... GRAZIE! Se siamo vicini...ti devo una cena! (quantomeno)

    Ora mi resta da fare in modo che il server possa gestire connessioni contemporanee da 10 moduli.

    Se non ti è di disturbo, se ho qualche dubbio chiedo a te. Il fatto è che non avevo mai prima di 7 giorni fa avuto a che fare con le socket. Esperienza (universitaria) in c ma mai di programmazione in rete. Ed ho dovuto capirci qualcosa nel più breve tempo possibile.
  • Re: Problema Applicazione Client Server c++

    In bocca al lupo per il progetto.
    Se hai qualsiasi problema chiedi pure al forum,qualcuno ti rispondera
  • Re: Problema Applicazione Client Server c++

    vbextreme ha scritto:


    In bocca al lupo per il progetto.
    Se hai qualsiasi problema chiedi pure al forum,qualcuno ti rispondera
    Crepi il lupo e grazie ancora!!! Ti farei un encomio!
Devi accedere o registrarti per scrivere nel forum
21 risposte