123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #define __USE_MISC
- #include <arpa/inet.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <signal.h>
- #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;
- }
|