Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    182

    [C-linux-socket] errore lettura recv()

    Ciao a tutti. Ho creato un client che deve comunicare con un server su un altro computer.
    Dopo aver mandato un primo messaggio al server, questo mi risponde, quindi tutto ok.
    Se mando subito dopo un altro messaggio, il server non risponde più, quando invece quest'ultimo è impostato per rispondere.

    la sintassi per ricevere è la stessa del primo messaggio ed è la seguente:

    Codice PHP:
    char    buf2[1024];
    int     ric;

    memset (&buf0x01024);
    ric recv (sd, &buf2sizeof(buf2), 0);
    printf ("Ritorno messaggio\t: %s\n"buf2);
    printf ("Valore messaggio\t: %i\n"ric_cvr); 
    Il messaggio mi ritorna una stringa vuota ed il valore di "ric" è 0, segno che non ho ricevuto nulla.
    Ho provato anche a impostare il socket come non-bloccante, ma il risultato è lo stesso.

    Mi chiedevo se la procedura fosse corretta, oppure se dopo aver fatto un primo send()-recv() bisognasse fare qualcosa prima di mandarne un altro.
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Il socket ricevente è quello restituito da Accept
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Dipende da come hai fatto il server!!! L'hai programmato per gestire la risposta a più client ???

    Posta tutto il codice!!! O almeno quello del server.... Perchè cosi è un po poco per poterti aiutare!!!

    Un consiglio per capire che errori avvengono, conviene mettere la recv in un if è chiamare la perror();

    codice:
    if ( (ric = recv(....)) < 0 ) 
             perror("Errore recv\n");

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    182
    @PeppePes88: grazie del consiglio, comunque se c'è un errore lo vedo anche con il valore del ric:
    printf ("Valore messaggiot: %i", ric); (come valore ricevo 0)

    Il server comunque non l'ho creato io: è quello di msn messenger. Sto tentando di fare una connessione. In poche parole prima di fare il login con user e password devo mandare alcuni messaggi di benvenuto. Il primo lo mando e ricevo risposta, mentre il secondo lo mando (penso) ma non ricevo nulla. Per questo mi chiedevo se tra un send() e l'altro si dovesse fare qualcosa (magari per mantenere la connessione, ma non penso che cada).

    L'accept() non è solo per i server?

    L'ordine delle mie funzioni è il seguente:
    1) socket()
    2) bind ()
    3) connect ()
    4) send() e recv()
    5) send() e recv() <-- non funziona la recv()

  5. #5
    L'accept() non è solo per i server?
    Di solito si.....

    dovrai seguire il protocollo di msn per interfacciarti... Perchè non provi a postare un po di codice del client
    cosi vedo se ti posso essere piu di aiuto!!!

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