// Sorry in advance for all the comments. This project is also a way for me to // learn C. #include "error.h" #include "message.h" #include #include // Contains host structure #include //sockaddr_in #include #include // Keeping for conversion functions #include #include #include // sockaddr #include // void error_crash(const char *msg) { // fprintf(stderr, "error crash: %s\n", msg); // exit(EXIT_FAILURE); // } // // void error_warn(const char *msg) { fprintf(stderr, "warning: %s\n", msg); } // // // TODO: Save the logs somewhere // void error_log(const char *msg) { fprintf(stderr, "log: %s\n", msg); } int main(int argc, char *argv[]) { // Set up containers for file descriptor id's int sockfd, portno, errflag; struct sockaddr_in serv_addr; bzero((char *)&serv_addr, sizeof(serv_addr)); struct hostent *server; char msgbuffer[255]; if (argc < 2) { err__crash("Not enough server info has been provided"); } if (argc > 2) { portno = atoi(argv[2]); } else { portno = 3940; } // Create socket sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) err__crash("Can't open socket."); server = gethostbyname(argv[1]); if (server == NULL) err__crash("No such host exists :("); serv_addr.sin_family = AF_INET; bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons(portno); errflag = connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); if (errflag < 0) err__crash("Failed to connect to host"); msg__req_login(&sockfd, "username", "passwd"); while (1) { bzero(msgbuffer, sizeof msgbuffer); fgets(msgbuffer, sizeof msgbuffer, stdin); errflag = write(sockfd, msgbuffer, strlen(msgbuffer)); if (errflag < 0) err__crash("Failed to write message"); bzero(msgbuffer, sizeof msgbuffer); errflag = read(sockfd, msgbuffer, sizeof msgbuffer); if (errflag < 0) err__crash("Failed to read message"); printf("Server: %s", msgbuffer); int cmp = strncmp("Bye", msgbuffer, 3); if (cmp == 0) break; } close(sockfd); return EXIT_SUCCESS; }