Ver Mensaje Individual
  #16  
Antiguo 07-03-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Para que el cliente no termine si no conecta con el servidor y continúe intentando la conexión, debe contener un bucle y quedaría algo como esto:
Código PHP:
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argcchar *argv[]){
  
WSADATA wsaData;
  
SOCKET conn_socket;
  
struct sockaddr_in server;
  
struct hostent *host;
  
char ServerAdr[] = "localhost";   // Nombre de la Máquina del Server
  
DWORD Port 6000;
  
int respsalida;
  
unsigned long inicio,fin,lapso;
  
char SendBuff[100];
  
HWND windowHandle;
  
DWORD processID;
  
BOOL Salir false;
  
int Result EXIT_SUCCESS;

  
//Obtengo el tiempo en el que inicia el proceso
  
inicio GetTickCount();

  
//Inicializamos la DLL de sockets
  
resp WSAStartup(MAKEWORD(1,0),&wsaData);
  if(
resp){
    
printf("Error al inicializar socket\n");
    
getchar();
    return -
1;
  }

  
// Bucle cliente principal
  
while(!Salir){
    
// Creamos el socket...
    
conn_socket socket(AF_INETSOCK_STREAMIPPROTO_TCP);
    if(
conn_socket == INVALID_SOCKET) {
      
printf("Error al crear socket\n");
      
Result WSAGetLastError();
      break;
    }
    else{
      
//Dirección IP del servidor y Puerto
      // localhost indica nuestra propia máquina...
      
host = (struct hostent *)gethostbyname(ServerAdr);
      if(!
host){
        
printf("No se ha encontrado servidor...\n");
        
Result WSAGetLastError();
        break;
      }
      else{
        
server.sin_family AF_INET;
        
server.sin_port   htons(Port);
        
server.sin_addr   = *((struct in_addr *)host->h_addr);
        
ZeroMemory(server.sin_zero8);

        
// Nos conectamos con el servidor...
        
if(connect(conn_socket, (struct sockaddr *)&server,sizeof(server)) == SOCKET_ERROR)
          
printf("Fallo al conectarse con el servidor\n");
        else{
          
// Aquí debería empezar un bucle de comunicación con el servidor según tu propio protocolo
          
printf("Conexion establecida con: %s\n"inet_ntoa(server.sin_addr));
          
//Esto lo pongo para tener una salida del proceso aleatoria
          //No es necesaria para nada pero al menos asi consigo simular
          //que el proceso hace algo mas a parte de comunicarse
          
srand(time(NULL));
          do{
            
salida rand()%1000;
            
Sleep(10);
          }while(
salida != 0);

          
//Obtengo el tiempo en que termina el proceso
          
fin GetTickCount();

          
//Obtengo el lapso de tiempo transcurrido
          
lapso fin-inicio;
          
processID GetCurrentProcessId();

          
//Enviamos el lapso de tiempo que transcurrio...
          
printf("Enviando lapso de tiempo... \n");
          
sprintf(SendBuff,"El proceso con PID: %lu ha funcionado durante %lu milisegundos.",processID,lapso);
          
send(conn_socket,SendBuff,sizeof(SendBuff),0);
          
printf("Lapso enviado: %lu milisegundos\n"lapso);
          
Salir true;
          
// Cerramos el socket y liberamos la DLL de sockets
          
closesocket(conn_socket);
        }
// conect
      
}// host
    
}// socket
  
}//while
  
WSACleanup();
  
getchar();
  return 
Result;

Se pueden simplificar esos mensajes y salidas de error.

Saludos.
Responder Con Cita