Sto programmando un'applicazione client/server socket C/C++. A questo punto, il client si connette al server ogni 50 ms e invia un messaggio.C socket socket client/server
tutto sembra opere, ma il flusso di dati non è continuo: Improvvisamente, il server non riceve nulla di più, e poi 5 messaggi in una volta ... E a volte tutto funziona ...
ha qualcuno un'idea dell'origine di questo strano comportamento?
Una parte del codice:
Cliente:
while (true)
{
if (SDL_GetTicks()-time>=50)
{
socket = new socket();
socket->write("blah");
message.clear();
message = socket->read();
socket->close();
delete socket;
time=SDL_GetTicks();
}
}
Server:
while (true) {
fd_set readfs;
struct timeval timeout={0,0};
FD_ZERO(&readfs);
FD_SET(sock, &readfs);
select(sock + 1, &readfs, NULL, NULL, &timeout)
if(FD_ISSET(sock, &readfs))
{
SOCKADDR_IN csin;
socklen_t crecsize = sizeof csin;
SOCKET csock = accept(sock, (SOCKADDR *) &csin, &crecsize);
sock_err = send(csock, buffer, 32, 0);
closesocket(csock);
}
}
Modifiche: 1. Ho cercato di fare
int flag = 1;
setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof flag);
In entrambi i client e server, ma il problema è ancora lì.
2.Yes quelle connessioni/deconnections sono molto inneficient, ma quando provo a scrivere
socket = new socket();
while (true)
{
if (SDL_GetTicks()-time>=50)
{
socket->write("blah");
message.clear();
message = socket->read();
time=SDL_GetTicks();
}
}
Quindi il messaggio viene inviato solo una volta (o ricevuti) ...
Infine:
Avevo dimenticato di applicare TCP_NODELAY al socket client sul lato server. Ora funziona perfettamente! Metto i processi nelle discussioni in modo che le prese si tengano aperte. Grazie a tutti :)
Sono sempre affascinato dalla conoscenza delle persone qui. Grazie mille. Lo proverò tra poco :) – Klaus
+1 per indicare il concetto in questione. –
Vedere la mia risposta sopra. – Klaus