Network Lab

TCP Client Server Communication Using Sockets

To implement a simple TCP client and server program for exchanging messages using socket programming in C.


Algorithms

Client

Step 1: Create Socket

  • Create a TCP client socket using socket(AF_INET, SOCK_STREAM, 0).
  • If socket creation fails, terminate the program.

Step 2: Define Server Address

  • Set the address family to AF_INET.
  • Set the port number to 5555.
  • Set the IP address to 127.0.0.1.

Step 3: Connect to Server

  • Connect the client socket to the server using connect().
  • Display a message if the connection is successful.

Step 4: Send Message

  • Send a message to the server using send().

Step 5: Receive Reply

  • Receive the server’s reply using recv().
  • Display the received message.

Step 6: Close Socket

  • Close the client socket using close().

Server

Step 1: Create Socket

  • Create a TCP server socket using socket(AF_INET, SOCK_STREAM, 0).
  • If socket creation fails, terminate the program.

Step 2: Define Server Address

  • Set the address family to AF_INET.
  • Set the port number to 5555.
  • Set the IP address to 127.0.0.1.

Step 3: Bind Socket

  • Bind the socket to the specified IP address and port using bind().

Step 4: Listen for Connections

  • Put the server in listening mode using listen().

Step 5: Accept Client

  • Accept a client connection using accept().

Step 6: Receive Message

  • Receive data from the client using recv().
  • Display the received message.

Step 7: Send Reply

  • Send a response message to the client using send().

Step 8: Close Connection

  • Close the client socket.
  • Repeat the process for the next client.

Programs

Client

#include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #define PORT 5555 #define BUF_SIZE 1024 int main() { int sock; struct sockaddr_in server_addr; char buffer[BUF_SIZE]; int n; sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror("socket error"); exit(1); } printf("[CLIENT] TCP socket created\n"); memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("connect error"); exit(1); } printf("[CLIENT] Connected to server\n"); strcpy(buffer, "HELLO FROM TCP CLIENT"); send(sock, buffer, strlen(buffer), 0); printf("[CLIENT] Sent: %s\n", buffer); memset(buffer, 0, BUF_SIZE); n = recv(sock, buffer, BUF_SIZE - 1, 0); if (n > 0) { buffer[n] = '\0'; printf("[CLIENT] Received: %s\n", buffer); } close(sock); printf("[CLIENT] Disconnected from server\n"); return 0; }

Server

#include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #define PORT 5555 #define BUF_SIZE 1024 int main() { int server_sock, client_sock; struct sockaddr_in server_addr, client_addr; socklen_t addr_size; char buffer[BUF_SIZE]; int n; server_sock = socket(AF_INET, SOCK_STREAM, 0); if (server_sock < 0) { perror("socket error"); exit(1); } printf("[SERVER] TCP socket created\n"); memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); if (bind(server_sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("bind error"); exit(1); } printf("[SERVER] Bound to port %d\n", PORT); if (listen(server_sock, 5) < 0) { perror("listen error"); exit(1); } printf("[SERVER] Listening...\n"); while (1) { addr_size = sizeof(client_addr); client_sock = accept(server_sock, (struct sockaddr *)&client_addr, &addr_size); if (client_sock < 0) { perror("accept error"); continue; } printf("[SERVER] Client connected\n"); memset(buffer, 0, BUF_SIZE); n = recv(client_sock, buffer, BUF_SIZE - 1, 0); if (n > 0) { buffer[n] = '\0'; printf("[SERVER] Received: %s\n", buffer); } strcpy(buffer, "HELLO FROM TCP SERVER"); send(client_sock, buffer, strlen(buffer), 0); printf("[SERVER] Sent response\n"); close(client_sock); printf("[SERVER] Client disconnected\n\n"); } close(server_sock); return 0; }