101 lines
2.3 KiB
C
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 |