#include #include #include #include #include #include #include #include struct game { unsigned char type; uint16_t initial_points; uint16_t stat_limit; uint16_t description_length; char description[65535]; } __attribute__((packed)); int main(int args, char ** argv){ struct sockaddr_in sad; sad.sin_port = htons(atoi(argv[2])); sad.sin_family = AF_INET; int skt = socket(AF_INET, SOCK_STREAM, 0); struct hostent* entry = gethostbyname(argv[1]); struct in_addr **addr_list = (struct in_addr**)entry->h_addr_list; struct in_addr* c_addr = addr_list[0]; char* ip_string = inet_ntoa(*c_addr); sad.sin_addr = *c_addr; printf("Connecting to: %s\n", ip_string); connect(skt, (struct sockaddr*)&sad, sizeof(struct sockaddr_in)); char buffer[1024]; recv(skt, buffer, 5, MSG_WAITALL); recv(skt, buffer, 7, MSG_WAITALL); struct game *gm = (struct game*)buffer; recv(skt, buffer + 7, gm->description_length, MSG_WAITALL); buffer[7+gm->description_length] = 0; close(skt); printf("Type: %d\nIntial Points: %d\nStat Limit: %d\nDescription Length: %d\nDescription: %s\n", gm->type, gm->initial_points, gm->stat_limit, gm->description_length, gm->description); return 0; }