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++ - 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
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
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
PM Quote