/* Author: Jozef Simko School year: 3., Bachelor study, 2021/22 Study program: Computer Networks Organization: Technical University of Kosice (TUKE), Faculty of Electrical Engineering and Informatics (FEI), Compiler: Winlibs GCC -- MinGW-W64 x86_64-posix-seh version 11.2.0, built by Brecht Sanders (OS Win) -- gcc version 9.3.0 (OS Linux) compile: WIN -- gcc client.c -Wall -Wextra -lwsock32 -o client LINUX -- gcc server.c -Wall -Wextra -o server version: 1.2 , 15.5.2021 Usage: This demo demonstrates simple way of using Socket API and loading measurements from our server. Results are compared with MAX and MIN value - be careful on used units. */ #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #include #else #include #include #include #include #include #endif #include #include #include /* Defines lenght of buffer for server's messages It's better to use higher values, it's helpful in case of hardware/network overload */ #define REPLY_MSG_SIZE 2048 /* Defines public or local IP address of server in decimal form */ #define IP_ADDRESS "192.168.0.101" /* Defines port used by server */ #define PORT 32500 /* MAX & MIN values are used to compare measurement result Values should be adjusted to the used units (check server config file) */ #define MAX_VALUE 1265 #define MIN_VALUE 1200 /* Closes socket (with dependency on used OS) */ void cleanUP(int sock){ #ifdef WIN32 closesocket(sock); WSACleanup(); #else close(sock); #endif return; } /* ====================================================== */ int main(){ int sock; struct sockaddr_in server; char server_reply[REPLY_MSG_SIZE]; #ifdef WIN32 WSADATA wsaData; int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0){ printf("WSASturtup() failed %d\n", iResult); return 1; } #endif if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){ printf("socket() failed\n"); cleanUP(sock); return 1; } memset(&server, 0, sizeof(server)); server.sin_family = AF_INET; server.sin_addr.s_addr = inet_addr(IP_ADDRESS); server.sin_port = htons(PORT); if (connect(sock, (struct sockaddr *) &server, sizeof(server)) != 0){ printf("Cannot connect to server - check IP, port and server status!\n"); cleanUP(sock); return 1; } if(recv(sock, server_reply, 2, 0) <= 0){ printf("Connection interrupted! Check server status!\n"); cleanUP(sock); return 1; } while(1){ memset(server_reply, 0, REPLY_MSG_SIZE); if(recv(sock, server_reply, REPLY_MSG_SIZE, 0) <= 0){ printf("Server crushed or disconnected!\n"); cleanUP(sock); return 1; } if(strcmp(server_reply, "%") == 0){ break; } char *rest = server_reply; for(int i = 0; i < 3; i++){ strtok_r(rest, ":", &rest); } double result = strtof(rest, NULL); if(result > MAX_VALUE){ printf("Distance out of range - too great (%0.2f)\n", result); } if(result < MIN_VALUE){ printf("Distance out of range - too low (%0.2f)\n", result); } } cleanUP(sock); return 0; }