client.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#define SERVER_IP "200.48.9.65"
#define PORT 5000
#define BUFFER_SIZE 1024
int main() {
WSADATA wsa;
SOCKET client_socket;
struct sockaddr_in server_addr;
char buffer[BUFFER_SIZE];
int recv_size;
// Initialize Winsock
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
printf("WSAStartup failed. Error Code: %d\n", WSAGetLastError());
return 1;
}
// Create socket
if ((client_socket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
printf("Socket creation failed. Error Code: %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
// Configure server address
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
server_addr.sin_port = htons(PORT);
// Connect to server
if (connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == SOCKET_ERROR) {
printf("Connection failed. Error Code: %d\n", WSAGetLastError());
closesocket(client_socket);
WSACleanup();
return 1;
}
printf("Connected to server on %s:%d\n", SERVER_IP, PORT);
// Send message to server
strcpy(buffer, "Hello from client");
if (send(client_socket, buffer, strlen(buffer), 0) == SOCKET_ERROR) {
printf("Sending message failed. Error Code: %d\n", WSAGetLastError());
closesocket(client_socket);
WSACleanup();
return 1;
}
printf("Message sent to server: %s\n", buffer);
// Receive message from server
memset(buffer, 0, BUFFER_SIZE);
if ((recv_size = recv(client_socket, buffer, BUFFER_SIZE, 0)) == SOCKET_ERROR) {
printf("Receiving message failed. Error Code: %d\n", WSAGetLastError());
} else {
buffer[recv_size] = '\0';
printf("Received message from server: %s\n", buffer);
}
// Close socket
closesocket(client_socket);
WSACleanup();
return 0;
}
Makefile
all : server client
server : server.c
gcc server.c -o server -lws2_32
client : client.c
gcc client.c -o client -lws2_32
server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#define PORT 5000
#define BUFFER_SIZE 1024
int main() {
WSADATA wsa;
SOCKET server_socket, client_socket;
struct sockaddr_in server_addr, client_addr;
int addr_len;
char buffer[BUFFER_SIZE];
int recv_size;
// Initialize Winsock
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 Code: %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
// Configure server address
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
// Bind socket to address
if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == SOCKET_ERROR) {
printf("Binding failed. Error Code: %d\n", WSAGetLastError());
closesocket(server_socket);
WSACleanup();
return 1;
}
printf("Server is listening on port %d...\n", PORT);
// Listen for incoming connections
if (listen(server_socket, 5) == SOCKET_ERROR) {
printf("Listening failed. Error Code: %d\n", WSAGetLastError());
closesocket(server_socket);
WSACleanup();
return 1;
}
// Accept incoming connection
addr_len = sizeof(client_addr);
if ((client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &addr_len)) == INVALID_SOCKET) {
printf("Accepting connection failed. Error Code: %d\n", WSAGetLastError());
closesocket(server_socket);
WSACleanup();
return 1;
}
printf("Client connected: %s\n", inet_ntoa(client_addr.sin_addr));
// Receive message from client
while ((recv_size = recv(client_socket, buffer, BUFFER_SIZE, 0)) > 0) {
buffer[recv_size] = '\0';
printf("Received message from client: %s\n", buffer);
// Echo message back to client
if (send(client_socket, buffer, strlen(buffer), 0) == SOCKET_ERROR) {
printf("Sending message failed. Error Code: %d\n", WSAGetLastError());
closesocket(server_socket);
closesocket(client_socket);
WSACleanup();
return 1;
}
printf("Message sent back to client: %s\n", buffer);
}
if (recv_size == 0) {
printf("Client disconnected.\n");
} else if (recv_size == SOCKET_ERROR) {
printf("Receive failed. Error Code: %d\n", WSAGetLastError());
}
// Close sockets
closesocket(client_socket);
closesocket(server_socket);
WSACleanup();
return 0;
}