Cita:
Empezado por rabata2001
Me sigue gustando más la idea de TCP. ¿Podrías citarme algún ejemplo para usarlo y evitar la congelación cuando intente desconectar el servidor con algún cliente enganchado?.
|
Controlando el error de recv, podemos saber si el servidor se descotectó...
Te pongo un fragmento en C a bajo nivel con sockets
Código:
//creamos el Sock y conectamos al servidor
Sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(Sock !=-1){
//Definimos la dirección IP y Puerto del servidor
host = gethostbyname("PCSERVER");
direc.sin_family=AF_INET;
direc.sin_port = htons(Port);
direc.sin_addr = *((struct in_addr *)host->h_addr);
ZeroMemory(direc.sin_zero, 8);
connect(Sock, (sockaddr*)&direc, sizeof(sockaddr));
// Saludo al servidor
send(Sock, Saludo, lstrlen(Saludo), 0);
// Mientras el Sock siga conectado
do {
Len = recv(Sock, Buffer, sizeof(Buffer), 0);
if(Len>0){
// Accciones pertinentes....
}
} while(Len!=0 && Len!=-1 && !Salir);
closesocket(Sock);
}
Si el código lo encierras en un thread, el resto de la app no sufrirá esperas en connect, send y recv.
Saludos.