#include <iostream>
#include <winsock.h>
int main() {
// Inicializar Winsock
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
std::cerr << "Error al inicializar Winsock." << std::endl;
return 1;
}
// Crear el socket del servidor
SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == INVALID_SOCKET) {
std::cerr << "Error al crear el socket del servidor." << std::endl;
WSACleanup();
return 1;
}
// Configurar la dirección del servidor
sockaddr_in serverAddress;
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = INADDR_ANY;
serverAddress.sin_port = htons(12345); // Puerto de escucha del servidor
// Vincular el socket del servidor a la dirección
if (bind(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) == SOCKET_ERROR) {
std::cerr << "Error al vincular el socket del servidor." << std::endl;
closesocket(serverSocket);
WSACleanup();
return 1;
}
// Escuchar conexiones entrantes
if (listen(serverSocket, SOMAXCONN) == SOCKET_ERROR) {
std::cerr << "Error al escuchar conexiones entrantes." << std::endl;
closesocket(serverSocket);
WSACleanup();
return 1;
}
std::cout << "Servidor iniciado. Esperando conexiones entrantes..." << std::endl;
// Aceptar una conexión entrante
SOCKET clientSocket = accept(serverSocket, NULL, NULL);
if (clientSocket == INVALID_SOCKET) {
std::cerr << "Error al aceptar la conexión entrante." << std::endl;
closesocket(serverSocket);
WSACleanup();
return 1;
}
std::cout << "Cliente conectado." << std::endl;
// Aquí puedes realizar la comunicación con el cliente
// Cerrar los sockets y liberar recursos
closesocket(clientSocket);
closesocket(serverSocket);
WSACleanup();
return 0;
}