Seguirò il tuo consiglio, grazie! In ogni modo, con il tuo codice ho ovviato a occasioni in cui la recv() andasse in errore anche dopo esito "positivo" della accept. Tuttavia il problema di fondo non si è eliminato, ma credo sia un problema inerente il modulo, giacché se eseguo il client su un altro PC anziché sul modulo va tutto ok.
Specifico una cosa: del while non avrei bisogno, giacché devo svuotare (periodicamente) sulla TCP/IP un buffer che vado (periodicamente) a riempire (sfruttando una funzione che ho già elaborato e che andrò poi ad aggiungere) dalla porta seriale del modulo, diciamo in questo caso il buffer contenente "respiri piano...ecc...".
Tuttavia ora che eseguo sul modulo... la connect() al client continua a dare -1. Quindi inessuna connessione, nessun invio di dati.
Tuttavia col codice che ora ti propongo, in cui ho messo dei cicli per fargli fare sempre dei tentativi di invio succede che: la connect() al client continua a dare -1 e quindi anche la send().Intanto il server rimane in attesa senza riuscire ad eseguire la accept()... dopo qualche secondo la accept() da esito positivo (come fa se la connect da errore?!?! bah) e quindi riesco a ricevere correttamente i dati del buffer.
In pratica tutto ciò è come se riuscisse ad avvenire solo forzando gli invii attraverso numerosi tentativi: ci sto perdendo la testa.
CLIENT:
char buffer[200]="respiri piano per non far rumore ti addormenti di sera e ti risvegli col sole. sei chiara come un'alba, sei fresca come l'aria.";
int bytesSent;
while(1)
{
bytesSent = strlen(buffer) + 1;
bytesSent=send(clientsocket, buffer, bytesSent , 0);
if(bytesSent!=-1)
printf("sent:%d\n",bytesSent);
}
printf("GoodBye\n");
closesocket(clientsocket);
SERVER:
printf ("remote socket= %d.\n", remoteSocket);
printf ("Connessione al client (IP: %s; PORTA: %d) avvenuta con successo",inet_ntoa(Client_addr.sin_addr),ntohs(Client_addr.sin_port));
printf ("\nremote socket= %d.\n", remoteSocket);
// while (1) //HO OSCURATO IL WHILE
// {
rec=recv(remoteSocket, buffer, sizeof(buffer), 0);
if (rec == SOCKET_ERROR)
{
printf("\n error on message\n");
// continue;
}
printf("\n Messaggio:");
printf("%s",buffer);
printf("\n");
/* if ( !strcmp(buffer,"exit") ) break;
}*/
WSACleanup();
system("pause");
return 0;
}