summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYour Name <admin@zero.net>2025-04-30 12:04:51 +0200
committerYour Name <admin@zero.net>2025-04-30 12:04:51 +0200
commit1b03746ea372291aab182173faa7ea4efe1b5c35 (patch)
treede2a82e86c3a59b9e183afb33ef963ca9c6a4c16
parent2fa1a0f5663ee76287010e2f24a12594931d049d (diff)
added client code
-rw-r--r--clientbin.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/clientbin.c b/clientbin.c
new file mode 100644
index 0000000..55bd6e2
--- /dev/null
+++ b/clientbin.c
@@ -0,0 +1,84 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <arpa/inet.h>
+#include <pthread.h>
+#include <limits.h>
+
+#define SERVER_IP "127.0.0.1"
+#define SERVER_PORT 6667
+#define BUFFER_SIZE 512
+
+int sock;
+pthread_t recv_thread;
+
+void *receive_handler(void *arg) {
+ char buffer[BUFFER_SIZE];
+ while (1) {
+ ssize_t bytes = recv(sock, buffer, sizeof(buffer) - 1, 0);
+ if (bytes <= 0) {
+ puts("Disconnected from server.");
+ close(sock);
+ exit(0);
+ }
+ buffer[bytes] = '\0';
+ printf("%s", buffer);
+ fflush(stdout);
+ }
+ return NULL;
+}
+
+void get_nickname(char *nickname, size_t size) {
+ char *user = getlogin();
+ if (!user) user = getenv("USER");
+
+ char hostname[HOST_NAME_MAX + 1];
+ if (gethostname(hostname, sizeof(hostname)) != 0) {
+ strncpy(hostname, "unknown", sizeof(hostname));
+ }
+
+ snprintf(nickname, size, "%s@%s", user ? user : "user", hostname);
+}
+
+int main() {
+ struct sockaddr_in server_addr;
+ char buffer[BUFFER_SIZE];
+ char nickname[100];
+
+ get_nickname(nickname, sizeof(nickname));
+
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+ if (sock < 0) {
+ perror("socket");
+ return 1;
+ }
+
+ server_addr.sin_family = AF_INET;
+ server_addr.sin_port = htons(SERVER_PORT);
+ inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr);
+
+ if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
+ perror("connect");
+ return 1;
+ }
+
+ // Send NICK and USER commands
+ char init[BUFFER_SIZE];
+ snprintf(init, sizeof(init), "NICK %s\r\nUSER %s 0 * :realname\r\n", nickname, nickname);
+ send(sock, init, strlen(init), 0);
+
+ puts("Connected to chat server.");
+ pthread_create(&recv_thread, NULL, receive_handler, NULL);
+
+ while (1) {
+ fgets(buffer, sizeof(buffer), stdin);
+ if (strcmp(buffer, "/quit\n") == 0) {
+ break;
+ }
+ send(sock, buffer, strlen(buffer), 0);
+ }
+
+ close(sock);
+ return 0;
+}