#include #include #include #include #include #include #include #include #include #include #define PORT 6667 #define BUFFER_SIZE 512 void *receive_handler(void *sock_ptr) { int sock = *(int *)sock_ptr; char buffer[BUFFER_SIZE]; int bytes_received; while ((bytes_received = recv(sock, buffer, BUFFER_SIZE - 1, 0)) > 0) { buffer[bytes_received] = '\0'; printf("%s", buffer); fflush(stdout); } return NULL; } int main() { int sock; struct sockaddr_in server_addr; char buffer[BUFFER_SIZE]; sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { perror("Socket creation failed"); exit(EXIT_FAILURE); } server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // or your server IP if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("Connection failed"); exit(EXIT_FAILURE); } printf("Connected to chat server.\n"); // Build the nickname as ssh-username@hostname char username[LOGIN_NAME_MAX]; char hostname[HOST_NAME_MAX]; char nickname[100]; struct passwd *pw = getpwuid(getuid()); if (pw) { strncpy(username, pw->pw_name, sizeof(username)); } else { strncpy(username, "unknown", sizeof(username)); } gethostname(hostname, sizeof(hostname)); snprintf(nickname, sizeof(nickname), "%s@%s", username, hostname); // Send NICK and USER commands char nick_cmd[150]; snprintf(nick_cmd, sizeof(nick_cmd), "NICK %s\n", nickname); send(sock, nick_cmd, strlen(nick_cmd), 0); snprintf(nick_cmd, sizeof(nick_cmd), "USER %s 0 * :%s\n", nickname, nickname); send(sock, nick_cmd, strlen(nick_cmd), 0); // Start receiver thread pthread_t recv_thread; pthread_create(&recv_thread, NULL, receive_handler, &sock); // Main input loop while (fgets(buffer, sizeof(buffer), stdin)) { send(sock, buffer, strlen(buffer), 0); } close(sock); return 0; }