He probado a inicializar winsock en el programa cliente usando el siguiente código:
Código
WSADATA wsaData; WORD version; int error; version = MAKEWORD( 2, 0 ); error = WSAStartup( version, &wsaData ); /* check for error */ if ( error != 0 ) { /* error occured */ return FALSE; } /* check for correct version */ if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0 ) { /* incorrect WinSock version */ printf("\n\nError 01: Incorrect WinSock Version. LOBYTE: %n . HIBYTE: %n .", (INT*)LOBYTE( wsaData.wVersion ), (INT*)HIBYTE( wsaData.wVersion )); WSACleanup(); return FALSE; } client = socket( AF_INET, SOCK_STREAM, 0 ); /* Resto del progrma */
También he añadido las correspondientes líneas al final del código para cerrar el socket, pero sigo recibiendo el mísmo error al llegar a la mísma línea.
A continuación dejo el código entero del cliente con las modificaciones realizadas:
Código
/* CLIENT */ #define __rtems__ #include <windows.h> #include <winsock2.h> #include <stdio.h> //#include <pthread.h> //Es para crear POSIX threads, lo necesitaré más tarde #include <conio.h> #include <iostream> #include <conio.h> #include <fstream> SOCKET client; struct hostent * host; char* hostname; int main() { hostname = new char[1024]; WSADATA wsaData; WORD version; int error; version = MAKEWORD( 2, 0 ); error = WSAStartup( version, &wsaData ); /* check for error */ if ( error != 0 ) { /* error occured */ return FALSE; } /* check for correct version */ if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0 ) { /* incorrect WinSock version */ printf("\n\nError 01: Incorrect WinSock Version. LOBYTE: %n . HIBYTE: %n .", (INT*)LOBYTE( wsaData.wVersion ), (INT*)HIBYTE( wsaData.wVersion )); WSACleanup(); return FALSE; } client = socket( AF_INET, SOCK_STREAM, 0 ); printf("Please enter the IP or name of the host to join> "); fflush( stdout ); scanf("%s", hostname); printf("\n\nAttempting connection with host %s", hostname); host = gethostbyname( hostname ); //printf("\n%p", host); //DEBUG struct sockaddr_in sin; memset( &sin, 0, sizeof sin ); //printf("\nSuccess0"); //DEBUG sin.sin_family = AF_INET; //printf("\nSuccess1"); //DEBUG sin.sin_addr.s_addr = ((struct in_addr *)(host->h_addr))->s_addr; //printf("\nSuccess2"); //DEBUG, el programa se traba aqui sin.sin_port = htons( 21 ); if ( connect( client, (PSOCKADDR)&sin, sizeof sin ) == SOCKET_ERROR ) { printf("\n\nError 01: Could not connect to the defined host: %s.", hostname); return FALSE; } WSACleanup(); closesocket( client ); return 0; }