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++ - Winsock -- stringa inviata con caratteri strani
Forum - C/C++ - Winsock -- stringa inviata con caratteri strani

Avatar
Valcars (Normal User)
Newbie


Messaggi: 20
Iscritto: 29/05/2012

Segnala al moderatore
Postato alle 23:30
Venerdì, 18/10/2013
Salve sono sempre io a rompere le scatole....volevo sapere perchè quando invio una stringa da input da tastiera e la invio al server mi compaiono dei caratteri strani... per farvi capire meglio questa volta vi posto un'immagine e il sorgente dell'invio e ricezione del messagio

Codice sorgente - presumibilmente C++

  1. Client -- manda messaggio al server da input
  2.  
  3.  
  4. int bytesSent;
  5. int bytesRecv = SOCKET_ERROR;
  6. char send_cmd[1024] ;                  
  7. char recv_cmd[1024] ;  
  8.  
  9. printf("inserisci un comando\n");
  10. scanf("%s",send_cmd);
  11. bytesSent = send (m_socket, send_cmd, strlen (send_cmd), 0);
  12. if (bytesSent == SOCKET_ERROR)
  13.         printf("Server: send() errore %ld \n", WSAGetLastError ());
  14. else
  15. {
  16. printf("inviato coimando");
  17. }



Codice sorgente - presumibilmente C++

  1. Server -- Riceve messaggio
  2.  
  3. int BytesSent;
  4. int bytesRecv = SOCKET_ERROR;
  5. char send_cmd [200];
  6. char recv_cmd [200] ;
  7.  
  8. //riceve il comando
  9. bytesRecv = recv (m_socket, recv_cmd, strlen(recv_cmd), 0);
  10. if (bytesRecv == SOCKET_ERROR)
  11.         {
  12.         printf("errore comando \n");
  13.         }
  14. else
  15.         {
  16.         printf("%s \n",recv_cmd);



ps questo codice è scritto in un void esterno forse centra anche questo???

cmq ho allegato anche l'immagine la console sopra è il server e quella sotto il client


Valcars ha allegato un file: Immagine.png (70863 bytes)
Clicca qui per guardare l'immagine


Ola :D
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:09
Sabato, 19/10/2013
Quando esegui la recv con

bytesRecv = recv (m_socket, recv_cmd, strlen(recv_cmd), 0);

la strlen non ha senso dato che la stringa, alla chiamata, non esiste ancora.
Quindi indicherai

bytesRecv = recv (m_socket, recv_cmd, 200, 0);

ma una volta ricevuta, dovrai terminarla (con il NUL a fine stringa) e lo farai scrivendo

if (bytesRecv == SOCKET_ERROR)
        {
        printf("errore comando \n");
        }
else
        {
         recv_cmd[bytesRecv]=0;
        printf("%s \n",recv_cmd);


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Valcars (Normal User)
Newbie


Messaggi: 20
Iscritto: 29/05/2012

Segnala al moderatore
Postato alle 10:41
Sabato, 19/10/2013
Testo quotato


    Quando esegui la recv con

bytesRecv = recv (m_socket, recv_cmd, strlen(recv_cmd), 0);

la strlen non ha senso dato che la stringa, alla chiamata, non esiste ancora.
Quindi indicherai

bytesRecv = recv (m_socket, recv_cmd, 200, 0);

ma una volta ricevuta, dovrai terminarla (con il NUL a fine stringa) e lo farai scrivendo

if (bytesRecv == SOCKET_ERROR)
        {
        printf("errore comando \n");
        }
else
        {
         recv_cmd[bytesRecv]=0;
        printf("%s \n",recv_cmd);





grazie mille nessuno mi hai risolto anche un'altro dubbio spiegardomelo :D cmq appena torno a casa ti faccio sapere :) grazie ancora


----- EDIT
bene funge grazie tante :)

Ultima modifica effettuata da Valcars il 19/10/2013 alle 15:13


Ola :D
PM Quote