#ifndef NETWORKING_H #define NETWORKING_H #define IP "37.60.240.95" #define PORT 6134 // Robe/costanti/struct ecc struct sockaddr_in server; // Fuznione che inizializza il socket e la connessione void InitSocket(WSADATA* wsa, SOCKET* s){ // Ciclo inizializzazzione librerie di rete WSAStartup(MAKEWORD(2,2),wsa); (*s) = socket(AF_INET, SOCK_STREAM, 0); // Ciclo di connessione al server while(1){ // Setup prima della connessione server.sin_addr.s_addr = inet_addr(IP); server.sin_family = AF_INET; server.sin_port = htons(PORT); // Connessione if(connect(*s, (struct sockaddr *)&server, sizeof(server)) != -1){ break; } Sleep(500); } } int isSocketConnected(SOCKET s) { if (s == INVALID_SOCKET) return 0; fd_set readfds; FD_ZERO(&readfds); FD_SET(s, &readfds); return (select(0, &readfds, NULL, NULL, 0) != SOCKET_ERROR); } void receiveCommand(WSADATA* wsa, SOCKET* s, uint8_t* receivebuffer) { if (!isSocketConnected(*s)) { printf("Socket non connesso, riconnessione necessaria\n"); closesocket(*s); WSACleanup(); InitSocket(wsa, s); return; } memset(receivebuffer, 0, 4096); int bytes_received = recv(*s, receivebuffer, 4095, 0); if (bytes_received == SOCKET_ERROR) { int error = WSAGetLastError(); printf("Errore ricezione: %d - Riconnessione...\n", error); closesocket(*s); WSACleanup(); InitSocket(wsa, s); } else if (bytes_received == 0) { printf("Client disconnected normally\n"); closesocket(*s); WSACleanup(); InitSocket(wsa, s); } else { receivebuffer[bytes_received] = '\0'; } } void sendCommand(WSADATA* wsa, SOCKET* s, char* sendbuffer) { if (!isSocketConnected(*s)) { printf("Socket non connesso, impossibile inviare\n"); closesocket(*s); WSACleanup(); InitSocket(wsa, s); return; } int length = strlen(sendbuffer); int bytes_sent = send(*s, sendbuffer, length, 0); if (bytes_sent == SOCKET_ERROR) { int error = WSAGetLastError(); printf("Errore invio: %d - Riconnessione...\n", error); closesocket(*s); WSACleanup(); InitSocket(wsa, s); } } #endif