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 argc, char *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 resp, salida;
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_INET, SOCK_STREAM, IPPROTO_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_zero, 8);
// 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.