Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema lentezza socket
Forum - C/C++ - Problema lentezza socket

Avatar
Il_Bomba (Member)
Rookie


Messaggi: 33
Iscritto: 26/12/2010

Segnala al moderatore
Postato alle 22:15
Venerdì, 20/01/2012
Ciao a tutti,

ho un problema con un piccolo programma che ho appena creato con le socket.
Il programma consiste in un terminale che consente di comunicare con un altro computer con messaggi testuali (una cosa tipo telnet per intenderci).
Il problema è che è lentissimo nell'inviare messaggi al computer di destinazione.
All'inizio ho pensato che fosse un problema di connessione dell'adsl, ma facendo le stesse cose con telnet, ho visto che non avevo problemi.
Qualcuno sa a cosa potrebbe essere dovuta questa lentezza?

Vi posto il programma:
Codice sorgente - presumibilmente C++

  1. #include<stdio.h>
  2. #include<sys/socket.h>
  3. #include<arpa/inet.h>
  4.  
  5. char mymex[100];
  6. char servmex[256];
  7.  
  8. void clearbuffers();
  9.  
  10. int main(){
  11.  
  12.         int server=0;
  13.         struct sockaddr_in serv_addr;
  14.         int port=0;
  15.         int err=0;
  16.         char address[16];
  17.  
  18.         printf("Bomba's socket interface\n");
  19.         printf("IP: ");
  20.         scanf("%s", address);
  21.         printf("Port: ");
  22.         scanf("%i", &port);
  23.  
  24.         server=socket(AF_INET, SOCK_STREAM, 0);
  25.         serv_addr.sin_family=AF_INET;
  26.         serv_addr.sin_port=htons(port);
  27.         serv_addr.sin_addr.s_addr=inet_addr(address);
  28.  
  29.         err=connect(server, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
  30.  
  31.         if (err!=-1){
  32.                 printf("Connessione a %s avvenuta senza problemi.\n", address);
  33.                 printf("Inizio comunicazione.\n");
  34.         }
  35.         else{
  36.                 printf("Errore durante la connessione.\n");
  37.         }
  38.  
  39.         while (mymex!="q"){
  40.                
  41.                 clearbuffers();
  42.                 recv(server, servmex, 256, 0);
  43.                 printf("%s\n", servmex);
  44.                 scanf("%s", mymex);
  45.                 send(server, mymex, 100, 0);
  46.  
  47.         }
  48.  
  49.         close(server);
  50.  
  51.         if (err!=-1) printf("Fine comunicazione.");
  52.  
  53. }
  54.  
  55. void clearbuffers(){
  56.  
  57.         int i;
  58.  
  59.         for (i=0; i<100; i++){
  60.                 mymex[i]='\0';
  61.         }
  62.  
  63.         for (i=0; i<256; i++){
  64.                 servmex[i]='\0';
  65.         }
  66.  
  67. }



P.S: Ho anche provato a togliere la funzione clearbuffers, ma non cambia niente :(

Grazie a tutti quelli che risponderanno.

Ultima modifica effettuata da Il_Bomba il 20/01/2012 alle 22:18
PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
1
Down
V
Segnala al moderatore
Postato alle 23:22
Sabato, 21/01/2012
ora non ho tempo per testarlo e lo farò domani, però prova a mettere questo al posto del while:


Codice sorgente - presumibilmente Plain Text

  1. while(strcmp(mymex, "q") != 0)
  2. {
  3.     memset(servmex, 0, 256);
  4.     memset(mymex, 0, 100);
  5.     recv(server, servmex, 256, 0);
  6.     printf("%s\n", servmex);
  7.     scanf("%s", mymex);
  8.     send(server, mymex, 100, 0);
  9. }




ricordati che il confronto tra stringhe in c non si fa con '=' ma con la funzione strcmp.
quindi la condizione del while non avrà mai effetto.

ah già, una svista per quanto riguarda il confronto tra stringhe, ma il problema è appunto la lentezza - Il_Bomba - 22/01/12 20:03


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 23:22
Sabato, 21/01/2012
ora non ho tempo per testarlo e lo farò domani, però prova a mettere questo al posto del while:


Codice sorgente - presumibilmente Plain Text

  1. while(strcmp(mymex, "q") != 0)
  2. {
  3.     memset(servmex, 0, 256);
  4.     memset(mymex, 0, 100);
  5.     recv(server, servmex, 256, 0);
  6.     printf("%s\n", servmex);
  7.     scanf("%s", mymex);
  8.     send(server, mymex, 100, 0);
  9. }




ricordati che il confronto tra stringhe in c non si fa con '=' ma con la funzione strcmp.
quindi la condizione del while non avrà mai effetto.


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 17:27
Domenica, 22/01/2012
non vedo grossi problemi nel codice, posta anche il server così vediamo cosa succede...

Non c'è un server, io ho provato il programma con dei server SMTP di alcuni gestori telefonici e di google, lo scopo per il quale l'ho scritto è proprio quello di funzionare come il programma telnet. - Il_Bomba - 22/01/12 20:05


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM