Salve,
sto programmando le socket con il c e sto avendo il seguente problema.
In pratica devo inserire in input un messaggio e spedire due byte alla volta (in pratica 2 caratteri alla volta) ad un server.
Il server, a sua volta, deve ricevere questo messaggio un byte alla volta.
Senza scrivere tutto il programma da me fatto, vi incollo i punti salienti. Questo è il lato client:
codice:
int messaggioLen;
int sock //è la socket dek client
char messaggio[32], msg[2]
printf("Inserisci la frase da spedire: ");
gets(messaggio);
messaggioLen = strlen(messaggio) + 1;
messaggio[messaggioLen] = '\0';
printf("Ricevuto: ");
//SPEDIZIONE MESSAGGIO A 2 BYTE A 2 BYTE
int i = 0, j = 0;
for(; i < messaggioLen; i+=2)
{
//COPIA DUE CARATTERI NELL'ARRAY msg
for(j = 0; j < 2; j++)
msg[j] = messaggio[i+j];
if(send(sock, msg, 2, 0) < 0)
{
GestioneErrore();
}
}
E questo è il lato server
codice:
if((byteRcvd = recv(clientSocket, messaggio, 1, 0)) < 0)
{
GestioneErrore();
}
Il problema è che pur mettendo questo if in un ciclo, non so quanto è lunga la stringa e, alla fine, mi trovo che il tutto va a bloccarsi sulla funzione recv che è una funzione bloccante dalla quale non ci si smuove se non si riceve qualcosa. Io stavo pensato anche di far controllare se venisse ricevuto il carattere '\0' ma per ora non ho avuto successo.
Voi conoscete altri modi per uscire dalla recv anche senza controllare il carattere '\0' e senza sapere a priori la lunghezza della stringa?
Grazie