Write a c program to implement client/server program using tcp
sockets.
daytime_server.c:
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib") // Link with Winsock library
#define PORT 9091
#define SERVER_IP "127.0.0.1"
#define BUFFER_SIZE 512
int main() {
WSADATA wsa;
SOCKET sock;
struct sockaddr_in server_addr;
char buffer[BUFFER_SIZE];
printf("Initializing Winsock...\n");
if (WSAStartup(MAKEWORD(2,2), &wsa) != 0) {
printf("Failed. Error Code : %d\n", WSAGetLastError());
return 1;
}
// Create socket
if((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
printf("Could not create socket : %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
printf("Socket created.\n");
// Prepare sockaddr_in structure
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
// Connect to server
if(connect(sock, (struct sockaddr *)&server_addr,
sizeof(server_addr)) < 0) {
printf("Connect error: %d\n", WSAGetLastError());
closesocket(sock);
WSACleanup();
return 1;
}
printf("Connected to server.\n");
// Send message to server
char *message = "Hello from client!";
if(send(sock, message, strlen(message), 0) == SOCKET_ERROR) {
printf("Send failed: %d\n", WSAGetLastError());
closesocket(sock);
WSACleanup();
return 1;
}
// Receive reply from server
int recv_size = recv(sock, buffer, BUFFER_SIZE - 1, 0);
if(recv_size == SOCKET_ERROR) {
printf("Failed to receive data: %d\n", WSAGetLastError());
} else if (recv_size == 0) {
printf("Connection closed by server.\n");
} else {
buffer[recv_size] = '\0'; // null terminate
printf("Received from server: %s\n", buffer);
}
// Cleanup
closesocket(sock);
WSACleanup();
return 0;
}
daytime_client.c:
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib") // Link with Winsock library
#define PORT 9091
#define SERVER_IP "127.0.0.1"
#define BUFFER_SIZE 512
int main() {
WSADATA wsa;
SOCKET sock;
struct sockaddr_in server_addr;
char buffer[BUFFER_SIZE];
printf("Initializing Winsock...\n");
if (WSAStartup(MAKEWORD(2,2), &wsa) != 0) {
printf("Failed. Error Code : %d\n", WSAGetLastError());
return 1;
}
// Create socket
if((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
printf("Could not create socket : %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
printf("Socket created.\n");
// Prepare sockaddr_in structure
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
// Connect to server
if(connect(sock, (struct sockaddr *)&server_addr,
sizeof(server_addr)) < 0) {
printf("Connect error: %d\n", WSAGetLastError());
closesocket(sock);
WSACleanup();
return 1;
}
printf("Connected to server.\n");
// Send message to server
char *message = "Hello from client!";
if(send(sock, message, strlen(message), 0) == SOCKET_ERROR) {
printf("Send failed: %d\n", WSAGetLastError());
closesocket(sock);
WSACleanup();
return 1;
}
// Receive reply from server
int recv_size = recv(sock, buffer, BUFFER_SIZE - 1, 0);
if(recv_size == SOCKET_ERROR) {
printf("Failed to receive data: %d\n", WSAGetLastError());
} else if (recv_size == 0) {
printf("Connection closed by server.\n");
} else {
buffer[recv_size] = '\0'; // null terminate
printf("Received from server: %s\n", buffer);
}
// Cleanup
closesocket(sock);
WSACleanup();
return 0;
}
Compile:
Terminal-1
gcc daytime_server.c -o prog.exe -lws2_32
./prog.exe
Terminal-2
gcc daytime_client.c -o prog1.exe -lws2_32
./prog1.exe
2.write a TCP client/server program in which client send three
numbers to the server in a single message. Server returns sum
difference and product as a result single message. Client program
should print the results appropriately
mserver.c:
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 8082
#define BUFFER_SIZE 1024
int main() {
WSADATA wsa;
SOCKET server_socket, client_socket;
struct sockaddr_in server_addr, client_addr;
int client_len = sizeof(client_addr);
char buffer[BUFFER_SIZE];
// Initialize Winsock
printf("Initializing Winsock...\n");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
printf("WSAStartup failed. Error Code: %d\n",
WSAGetLastError());
return 1;
}
// Create socket
if ((server_socket = socket(AF_INET, SOCK_STREAM, 0)) ==
INVALID_SOCKET) {
printf("Socket creation failed. Error: %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
// Setup address
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
// Bind
if (bind(server_socket, (struct sockaddr *)&server_addr,
sizeof(server_addr)) == SOCKET_ERROR) {
printf("Bind failed. Error: %d\n", WSAGetLastError());
closesocket(server_socket);
WSACleanup();
return 1;
}
// Listen
listen(server_socket, 1);
printf("Server listening on port %d...\n", PORT);
// Accept connection
client_socket = accept(server_socket, (struct sockaddr
*)&client_addr, &client_len);
if (client_socket == INVALID_SOCKET) {
printf("Accept failed. Error: %d\n", WSAGetLastError());
closesocket(server_socket);
WSACleanup();
return 1;
}
printf("Client connected.\n");
// Receive data
int recv_size = recv(client_socket, buffer, BUFFER_SIZE - 1, 0);
if (recv_size == SOCKET_ERROR) {
printf("Receive failed. Error: %d\n", WSAGetLastError());
} else {
buffer[recv_size] = '\0';
int a, b, c;
sscanf(buffer, "%d %d %d", &a, &b, &c);
int sum = a + b + c;
int diff = a - b - c;
int prod = a * b * c;
// Prepare result message
char result[BUFFER_SIZE];
snprintf(result, sizeof(result), "Sum: %d, Difference: %d, Product:
%d", sum, diff, prod);
// Send result
send(client_socket, result, strlen(result), 0);
printf("Processed and sent result: %s\n", result);
}
// Cleanup
closesocket(client_socket);
closesocket(server_socket);
WSACleanup();
return 0;
}
nclient.c:
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#pragma comment(lib, "ws2_32.lib")
#define SERVER_IP "127.0.0.1"
#define PORT 8082
#define BUFFER_SIZE 1024
int main() {
WSADATA wsa;
SOCKET sock;
struct sockaddr_in server_addr;
char buffer[BUFFER_SIZE];
// Initialize Winsock
printf("Initializing Winsock...\n");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
printf("WSAStartup failed. Error Code: %d\n",
WSAGetLastError());
return 1;
}
// Create socket
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
printf("Socket creation failed. Error: %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
// Setup server address
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
// Connect
if (connect(sock, (struct sockaddr *)&server_addr,
sizeof(server_addr)) < 0) {
printf("Connection failed. Error: %d\n", WSAGetLastError());
closesocket(sock);
WSACleanup();
return 1;
}
printf("Connected to server.\n");
// Input 3 numbers
int x, y, z;
printf("Enter three integers separated by space: ");
scanf("%d %d %d", &x, &y, &z);
// Send numbers to server
snprintf(buffer, sizeof(buffer), "%d %d %d", x, y, z);
send(sock, buffer, strlen(buffer), 0);
// Receive result
int recv_size = recv(sock, buffer, BUFFER_SIZE - 1, 0);
if (recv_size > 0) {
buffer[recv_size] = '\0';
printf("Received from server: %s\n", buffer);
} else {
printf("Failed to receive response from server.\n");
}
// Cleanup
closesocket(sock);
WSACleanup();
return 0;
}
Compilation:
Terminal1:
gcc mserver.c -o server.exe -lws2_32
./server.c
Client connected.
Processed and sent result: Sum: 15, Difference: -13, Product: 45
Terminal2:
gcc nclient.c -o client.exe -lws2_32
./client.exe
“Enter three integers separated by space: 1 5 9”
Terminal1:
“after client run successfully the server output is”
Client connected.
Processed and sent result: Sum: 15, Difference: -13, Product: 45