Estoy programando una aplicación de sockets cliente/servidor C/C++. En este punto, el cliente se conecta al servidor cada 50 ms y envía un mensaje.sockets C cliente/servidor retraso
Todo parece a las obras, pero el flujo de datos no es continua: De repente, el servidor no recibe nada más, y luego 5 mensajes a la vez ... Y a veces todo funciona ...
tiene a alguien una idea del origen de este extraño comportamiento?
Alguna parte del código:
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();
}
}
Servidor:
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);
}
}
ediciones: 1. Se ha intentado realizar
int flag = 1;
setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof flag);
Tanto en el cliente como en el servidor, pero el problema sigue ahí.
2.Yes esas conexiones/deconnections son muy inneficient, pero cuando trato de escribir
socket = new socket();
while (true)
{
if (SDL_GetTicks()-time>=50)
{
socket->write("blah");
message.clear();
message = socket->read();
time=SDL_GetTicks();
}
}
A continuación, el mensaje sólo se envía una vez (o recibidas) ...
Por último:
Había olvidado aplicar TCP_NODELAY al socket del cliente en el lado del servidor. ¡Ahora funciona perfectamente! Pongo los procesos en hilos para que los enchufes se mantengan abiertos. Gracias a todos :)
Siempre estoy fascinado por el conocimiento de las personas aquí. Muchas gracias. Lo intentaré en un momento :) – Klaus
+1 para señalar el concepto involucrado. –
Ver mi respuesta arriba. – Klaus