#include #include #include #define __USE_MISC #include #include #include #include #include #include #include "Stream.h" #define BUFFER_SIZE 1024 #define PORT 6543 int clientSocket = -1; void cleanUp() { if(clientSocket != -1) { if(close(clientSocket) != 0) { perror("Cannot close client socket"); } else { printf("socket closed\n"); } } } void interruptHandler(int signal) { cleanUp(); exit(EXIT_SUCCESS); } void safeExit(int status) { cleanUp(); exit(status); } int main(int argc, char **argv) { signal(SIGINT, interruptHandler); signal(SIGKILL, interruptHandler); char buffer[BUFFER_SIZE]; int size; if(argc < 2) { printf("Usage: %s server_address\n", argv[0]); safeExit(EXIT_FAILURE); } clientSocket = socket(AF_INET, SOCK_STREAM, 0); if(clientSocket == -1) { perror("Cannot create socket"); safeExit(EXIT_FAILURE); } struct sockaddr_in clientSocketData; memset(&clientSocketData, 0, sizeof (clientSocketData)); clientSocketData.sin_family = AF_INET; clientSocketData.sin_port = htons(PORT); if(inet_aton(argv[1], &clientSocketData.sin_addr) == 0) { printf("'%s' is not a valid ip\n", argv[1]); safeExit(EXIT_FAILURE); } if(connect(clientSocket, (struct sockaddr*) &clientSocketData, sizeof(clientSocketData)) == 0) { printf("Connection with server (%s) established\n", inet_ntoa(clientSocketData.sin_addr)); size = recv(clientSocket, buffer, BUFFER_SIZE - 1, 0); if(size > 0) { buffer[size] = '\0'; printf("%s", buffer); if(strncmp(buffer, "error", 5) == 0) { safeExit(EXIT_FAILURE); } } } else { perror("No server is available"); safeExit(EXIT_FAILURE); } while(strcmp(buffer, "quit\n") != 0) { printf("Send message: "); fgets(buffer, BUFFER_SIZE, stdin); Stream out; out.index = 0; out.size = BUFFER_SIZE; streamWriteChar(0, &out); streamWriteInt(-423, &out); streamWriteInt(-6456463, &out); streamWriteInt(443534, &out); streamWriteInt(75676, &out); if(send(clientSocket, out.data, out.index, MSG_NOSIGNAL) == -1) { perror("Cannot send data"); break; } } safeExit(EXIT_SUCCESS); return EXIT_SUCCESS; }