PDA

Visualizza la versione completa : [C-linux-socket] errore lettura recv()


shadyz
14-01-2009, 20:07
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:



char buf2[1024];
int ric;

memset (&buf, 0x0, 1024);
ric = recv (sd, &buf2, sizeof(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.

XWolverineX
14-01-2009, 20:12
Il socket ricevente quello restituito da Accept

PeppePes88
14-01-2009, 20:50
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();



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

shadyz
15-01-2009, 00:40
@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()

PeppePes88
16-01-2009, 13:50
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!!!

Loading