tcp_echo_client.c

Download
c 79 lines 1.9 KB
 1/**
 2 * TCP Echo Client
 3 *
 4 * Connects to a TCP echo server and sends user input.
 5 * Receives and displays the echoed response.
 6 *
 7 * Build: make
 8 * Usage: ./tcp_echo_client [server_ip] [port]
 9 *   Default: 127.0.0.1:8080
10 */
11
12#include <stdio.h>
13#include <stdlib.h>
14#include <string.h>
15#include <unistd.h>
16#include <sys/socket.h>
17#include <netinet/in.h>
18#include <arpa/inet.h>
19
20#define DEFAULT_PORT 8080
21#define BUF_SIZE     1024
22
23int main(int argc, char *argv[]) {
24    const char *server_ip = (argc > 1) ? argv[1] : "127.0.0.1";
25    int port = (argc > 2) ? atoi(argv[2]) : DEFAULT_PORT;
26
27    /* Create socket */
28    int sock_fd = socket(AF_INET, SOCK_STREAM, 0);
29    if (sock_fd < 0) {
30        perror("socket");
31        exit(EXIT_FAILURE);
32    }
33
34    /* Connect */
35    struct sockaddr_in server_addr = {
36        .sin_family = AF_INET,
37        .sin_port = htons(port)
38    };
39
40    if (inet_pton(AF_INET, server_ip, &server_addr.sin_addr) <= 0) {
41        fprintf(stderr, "Invalid address: %s\n", server_ip);
42        close(sock_fd);
43        exit(EXIT_FAILURE);
44    }
45
46    if (connect(sock_fd, (struct sockaddr *)&server_addr,
47                sizeof(server_addr)) < 0) {
48        perror("connect");
49        close(sock_fd);
50        exit(EXIT_FAILURE);
51    }
52
53    printf("Connected to %s:%d\n", server_ip, port);
54    printf("Type messages (Ctrl+D to quit):\n");
55
56    char buffer[BUF_SIZE];
57    while (fgets(buffer, BUF_SIZE, stdin) != NULL) {
58        /* Send message */
59        ssize_t sent = send(sock_fd, buffer, strlen(buffer), 0);
60        if (sent < 0) {
61            perror("send");
62            break;
63        }
64
65        /* Receive echo */
66        ssize_t bytes = recv(sock_fd, buffer, BUF_SIZE - 1, 0);
67        if (bytes <= 0) {
68            printf("Server disconnected\n");
69            break;
70        }
71        buffer[bytes] = '\0';
72        printf("Echo: %s", buffer);
73    }
74
75    close(sock_fd);
76    printf("Disconnected\n");
77    return 0;
78}