Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 24
  1. #11
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Scusa, ma cosa non ti e' chiaro quando ti scrivo :

    se non usi i tag CODE e non scrivi il codice formattato, questo non puo' essere seguito

    E poi, inviare una stringa vuota, non ha senso ... semmai vuoi dire che devi inviare unicamente il carattere

    \n

    ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  2. #12
    Utente di HTML.it L'avatar di jtb
    Registrato dal
    Dec 2008
    Messaggi
    39
    Non ho dimestichezza con diversi termini come "Tag CODE" e con la formattazione da parte della pagina di risposta visto che sono iscritto da meno di una settimana :master:

  3. #13
    Utente di HTML.it L'avatar di jtb
    Registrato dal
    Dec 2008
    Messaggi
    39
    Oregon era questa la formattazione che intendevi????

    codice:
    #include <vcl.h>
    #include <stdio.h>
    #include <iostream.h>
    #include <winsock.h>
    #include <string.h>
    #include <mem.h>
    #pragma hdrstop
    char buff[256];
    AnsiString buffbuff;
    int val=0;
    
    
    #pragma argsused
    int main(int argc, char* argv[])
    {
    SOCKET clientsocket;
    SOCKADDR_IN addr;
    hostent * hostentrata;
    char messaggio[80];
    short port;
    WORD wVersionRequested = MAKEWORD(2,2);
    WSADATA wsaData;
    int nLen=sizeof(SOCKADDR);
    int ricv;
    if (WSAStartup(wVersionRequested, &wsaData)!= NO_ERROR)
    {
    cout << "Errore di Inizializzazione" << endl;
    goto fine;
    }
    port = 25;
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("83.224.64.25");
    addr.sin_port = htons(port);
    clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (connect(clientsocket, (LPSOCKADDR)&addr, sizeof(addr)) < 0)
    {
    printf("Errore nella connessione con il Server\nPremi invio per uscire.");
    goto fine;
    }
    dinuov:
    if (val==1) {
    goto salto;
    }
    risult:
    memset(buff,0,sizeof(buff));
    ricv=recvfrom(clientsocket,buff,sizeof(buff),0,(LPSOCKADDR)&addr, &nLen);
    printf("%s\n",buff);
    cout << "\t";
    salto:
    cin.get(messaggio, 256, '\n');
    while (cin.get() != '\n');
    strcpy(buff,messaggio);
    strcat(buff, "\n");
    sendto(clientsocket,buff,strlen(buff),0,(LPSOCKADDR)&addr, nLen);
    strcpy(buff,messaggio);
    buffbuff=(char*)buff;
    if (buffbuff=="Data"||buffbuff=="data") {
    if (!val==1) {
    val=1;
    goto risult;
    }
    }
    if (buffbuff==".") {
    val=0;
    }
    goto dinuov;
    fine:
    closesocket(clientsocket);
    WSACleanup();
    getchar();
    }

  4. #14
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    In parte sì ... ma anche ...

    codice:
    #include <vcl.h>
    #include <stdio.h>
    #include <iostream.h>
    #include <winsock.h>
    #include <string.h>
    #include <mem.h>
    
    #pragma hdrstop
    
    char buff[256];
    AnsiString buffbuff;
    int val=0;
    
    #pragma argsused
    
    int main(int argc, char* argv[])
    {
       SOCKET clientsocket;
       SOCKADDR_IN addr;
       hostent * hostentrata;
       char messaggio[80];
       short port;
       WORD wVersionRequested = MAKEWORD(2,2);
       WSADATA wsaData;
       int nLen=sizeof(SOCKADDR);
       int ricv;
    
       if (WSAStartup(wVersionRequested, &wsaData)!= NO_ERROR)
       {
          cout << "Errore di Inizializzazione" << endl;
          goto fine;
       }
    
       port = 25;
       addr.sin_family = AF_INET;
       addr.sin_addr.s_addr = inet_addr("83.224.64.25");
       addr.sin_port = htons(port);
       clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
       if (connect(clientsocket, (LPSOCKADDR)&addr, sizeof(addr)) < 0)
       {
          printf("Errore nella connessione con il Server\nPremi invio per uscire.");
          goto fine;
       }
    
    dinuov:
       if (val==1) 
       {
          goto salto;
       }
    
    risult:
       memset(buff,0,sizeof(buff));
       ricv=recvfrom(clientsocket,buff,sizeof(buff),0,(LPSOCKADDR)&addr, &nLen);
       printf("%s\n",buff);
       cout << "\t";
    
    salto:
       cin.get(messaggio, 256, '\n');
       while (cin.get() != '\n');
       strcpy(buff,messaggio);
       strcat(buff, "\n");
       sendto(clientsocket,buff,strlen(buff),0,(LPSOCKADDR)&addr, nLen);
       strcpy(buff,messaggio);
       buffbuff=(char*)buff;
    
       if (buffbuff=="Data"||buffbuff=="data") 
       {
          if (!val==1) 
          {
             val=1;
             goto risult;
          }
       }
    
       if (buffbuff==".") 
       {
          val=0;
       }
       goto dinuov;
    
    fine:
       closesocket(clientsocket);
       WSACleanup();
       getchar();
    }
    Comunque, dovresti evitare di usare i goto ... rendono il codice poco leggibile ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #15
    Utente di HTML.it L'avatar di jtb
    Registrato dal
    Dec 2008
    Messaggi
    39
    Ok.......cosa mi consigli al posto dei goto (specialmente per questo programma)??

  6. #16
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Beh ... dovresti rivedere tutto il codice usando le istruzioni per il controllo di cicli (while ...) e dividerlo in opportune funzioni da richiamare ... ma non e' una cosa da farsi in poco tempo.

    Ti consiglio pero' di farlo quando potrai ...

    Per il problema, continuo a non capire la questione del buffer vuoto ... spiegati meglio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #17
    codice:
    #include <vcl.h>
    #include <stdio.h>
    #include <iostream.h>
    #include <winsock.h>
    #include <string.h>
    #include <mem.h>
    
    #pragma hdrstop
    
    //Variabili globali no buone
    char buff[256];
    AnsiString buffbuff;
    int val=0;
    
    #pragma argsused
    
    int main(int argc, char* argv[])
    {
       SOCKET clientsocket;
       SOCKADDR_IN addr;
       hostent * hostentrata;
       char messaggio[80];
       short port;
       WORD wVersionRequested = MAKEWORD(2,2);
       WSADATA wsaData;
       int nLen=sizeof(SOCKADDR);
       int ricv;
    
       if (WSAStartup(wVersionRequested, &wsaData)!= NO_ERROR)
       {
          cout << "Errore di Inizializzazione" << endl;
          goto fine;
       }
    
       port = 25;
       addr.sin_family = AF_INET;
       addr.sin_addr.s_addr = inet_addr("83.224.64.25");
       addr.sin_port = htons(port);
       clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //Non controlli il valore di uscita
       if (connect(clientsocket, (LPSOCKADDR)&addr, sizeof(addr)) < 0)
       {
          printf("Errore nella connessione con il Server\nPremi invio per uscire.");
          goto fine;
       }
    
    //Usare una variabile globale per i controlli è male, può portare a situazioni amibigue e comportamenti imprevisti.
    dinuov:
       if (val==1) 
       {
          goto salto;
       }
    
    //Non controlli il valore di uscita di ricv
    risult:
       memset(buff,0,sizeof(buff));
       ricv=recvfrom(clientsocket,buff,sizeof(buff),0,(LPSOCKADDR)&addr, &nLen);
       printf("%s\n",buff);
       cout << "\t";
    
    //Prendi 256 caratteri in input, quando messaggio ne contiene 80 ! Buffer Overflow, no buono.
    salto:
       cin.get(messaggio, 256, '\n');
    //Puoi usare cin.sync()
       while (cin.get() != '\n');
    //Non puoi utilizzare direttamente messaggio ?
       strcpy(buff,messaggio);
       strcat(buff, "\n");
       sendto(clientsocket,buff,strlen(buff),0,(LPSOCKADDR)&addr, nLen);
    
    //Buffer Overflow !!!!
       strcpy(buff,messaggio);
       buffbuff=(char*)buff;
    
       if (buffbuff=="Data"||buffbuff=="data") 
       {
    //Esiste il !=
          if (!val==1) 
          {
             val=1;
             goto risult;
          }
       }
    
       if (buffbuff==".") 
       {
          val=0;
       }
       goto dinuov;
    
    fine:
       closesocket(clientsocket);
       WSACleanup();
       getchar();
    
    //Manca il return 0
    
    }

  8. #18
    Utente di HTML.it L'avatar di jtb
    Registrato dal
    Dec 2008
    Messaggi
    39
    No...errore mio.....non è la funzione sendto che non accetta buffer vuoti e questa funzione che blocca tutto:

    codice:
    cin.get(messaggio, 256, '\n');
    
    while (cin.get() != '\n');  ------->Effettuando il debug questa funzione non finisce mai...
    Sto provando a cambiare il codice ,tipo togliendo quasi tutti i goto, ma ce sempre lo stesso problema.....

  9. #19
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da jtb
    codice:
    cin.get(messaggio, 256, '\n');
    
    while (cin.get() != '\n');  ------->Effettuando il debug questa funzione non finisce mai...
    codice:
    if(strlen(messaggio)) while (cin.get() != '\n');
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #20
    Utente di HTML.it L'avatar di jtb
    Registrato dal
    Dec 2008
    Messaggi
    39
    Il codice non blocca il programma però salta la funzione "cin.get(messaggio, 256, '\n');"

    codice:
    cin.get(messaggio, 256, '\n'); ------>Funzione Saltata...
    if(strlen(messaggio)) while (cin.get() != '\n');
    Purtroppo adesso succede cosi:

    Arrivato a "Data" inserisco senza problemi "From: ecc..." e "To: ecc...." ma quando devo lasciare una riga vuota per finire l'inserimento dell'intestazione (come su telnet) e passare al testo vero e proprio succede quello che ho spiegato su. Praticamente con il debug ho verificato, ed arrivato a
    codice:
    cin.get(messaggio, 256, '\n');
    il programma va avanti a vuoto senza farmi inserire nulla......

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