Ver Mensaje Individual
  #9  
Antiguo 20-03-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Reputación: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por rabata2001 Ver Mensaje
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.
Responder Con Cita