Solution and implementation for Q7 from Computer Networks (cnl).
7a) TCP Client-Server Communication (Ubuntu/Linux)
Files:
- server.cpp (TCP Server)
- client.cpp (TCP Client)
-----------------------------------------------------------------
SERVER (server.cpp):
#include <iostream>
#include <unistd.h>
#include <arpa/inet.h>
using namespace std;
int main() {
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in serverAddr{};
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = INADDR_ANY;
serverAddr.sin_port = htons(8080);
bind(serverSocket, (sockaddr*)&serverAddr, sizeof(serverAddr));
listen(serverSocket, 1);
cout << "Waiting for client..." << endl;
int clientSocket = accept(serverSocket, nullptr, nullptr);
char buffer[1024] = {0};
read(clientSocket, buffer, sizeof(buffer));
cout << "Message from client: " << buffer << endl;
close(clientSocket);
close(serverSocket);
return 0;
}
-----------------------------------------------------------------
CLIENT (client.cpp):
#include <iostream>
#include <unistd.h>
#include <arpa/inet.h>
using namespace std;
int main() {
int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in serverAddr{};
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
serverAddr.sin_port = htons(8080);
connect(clientSocket, (sockaddr*)&serverAddr, sizeof(serverAddr));
string message = "Hello, server!";
send(clientSocket, message.c_str(), message.size(), 0);
close(clientSocket);
return 0;
}
--------------------------------------------------------------------
Terminal Command (Ubuntu):
1) g++ server.cpp -o server
2) ./server
Terminal Command (Ubuntu):
1) g++ client.cpp -o client
2) ./client
7b) UDP Client-Server Communication (Ubuntu/Linux)
Files:
- server.cpp (UDP Server)
- client.cpp (UDP Client)
------------------------------------------------------------
SERVER (server.cpp):
#include <iostream>
#include <unistd.h>
#include <arpa/inet.h>
#include <cstring>
using namespace std;
int main() {
int serverSocket = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in serverAddr{};
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = INADDR_ANY;
serverAddr.sin_port = htons(5001);
bind(serverSocket, (sockaddr*)&serverAddr, sizeof(serverAddr));
char buffer[1024];
sockaddr_in clientAddr;
socklen_t clientAddrSize = sizeof(clientAddr);
cout << "[+] UDP Server listening on port 5001..." << endl;
while (true) {
int bytesReceived = recvfrom(serverSocket, buffer, sizeof(buffer) - 1, 0,
(sockaddr*)&clientAddr, &clientAddrSize);
if (bytesReceived > 0) {
buffer[bytesReceived] = '\0';
cout << "Message from client: " << buffer << endl;
}
}
close(serverSocket);
return 0;
}
-------------------------------------------------------------------
CLIENT (client.cpp):
#include <iostream>
#include <unistd.h>
#include <arpa/inet.h>
#include <cstring>
using namespace std;
int main() {
int clientSocket = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in serverAddr{};
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(5001);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
string message;
cout << "Enter message to send: ";
getline(cin, message);
sendto(clientSocket, message.c_str(), message.length(), 0,
(sockaddr*)&serverAddr, sizeof(serverAddr));
cout << "Message sent!" << endl;
close(clientSocket);
return 0;
}
-----------------------------------------------------------------
Terminal Command (Ubuntu):
1) g++ server.cpp -o server
2) ./server
Terminal Command (Ubuntu):
1) g++ client.cpp -o client
2) ./client
7a) TCP Client-Server Communication (Windows)
Files:
- server.cpp (TCP Server)
- client.cpp (TCP Client)
SERVER (server.cpp):
---------------------------------------------------------------
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib") // Winsock library
int main() {
WSADATA wsa;
WSAStartup(MAKEWORD(2, 2), &wsa);
SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = INADDR_ANY;
serverAddr.sin_port = htons(8080);
bind(serverSocket, (sockaddr*)&serverAddr, sizeof(serverAddr));
listen(serverSocket, 5);
std::cout << "Waiting for client...\n";
SOCKET clientSocket = accept(serverSocket, nullptr, nullptr);
char buffer[1024] = {0};
recv(clientSocket, buffer, sizeof(buffer), 0);
std::cout << "Message from client: " << buffer << std::endl;
closesocket(clientSocket);
closesocket(serverSocket);
WSACleanup();
return 0;
}
---------------------------------------------------------------
Terminal Command (Windows):
1) g++ server.cpp -o server -lws2_32
2) .\server.exe
---------------------------------------------------------------
CLIENT (client.cpp):
---------------------------------------------------------------
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib") // Winsock library
int main() {
WSADATA wsa;
WSAStartup(MAKEWORD(2, 2), &wsa);
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
serverAddr.sin_port = htons(8080);
connect(clientSocket, (sockaddr*)&serverAddr, sizeof(serverAddr));
const char* message = "Hello, server!";
send(clientSocket, message, strlen(message), 0);
closesocket(clientSocket);
WSACleanup();
return 0;
}
---------------------------------------------------------------
Terminal Command (Windows):
1) g++ client.cpp -o client -lws2_32
2) .\client.exe
7b) UDP Client-Server Communication (Windows)
Files:
- server.cpp (UDP Server)
- client.cpp (UDP Client)
SERVER (server.cpp):
---------------------------------------------------------------
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsa;
WSAStartup(MAKEWORD(2,2), &wsa);
SOCKET serverSocket = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = INADDR_ANY;
serverAddr.sin_port = htons(5001);
bind(serverSocket, (sockaddr*)&serverAddr, sizeof(serverAddr));
char buffer[1024];
sockaddr_in clientAddr;
int clientAddrSize = sizeof(clientAddr);
std::cout << "[+] UDP Server listening on port 5001..." << std::endl;
while (true) {
int bytesReceived = recvfrom(serverSocket, buffer, sizeof(buffer) - 1, 0,
(sockaddr*)&clientAddr, &clientAddrSize);
if (bytesReceived > 0) {
buffer[bytesReceived] = '\0';
std::cout << "Message from client: " << buffer << std::endl;
}
}
closesocket(serverSocket);
WSACleanup();
return 0;
}
---------------------------------------------------------------
Terminal Command (Windows):
1) g++ server.cpp -o server -lws2_32
2) .\server.exe
---------------------------------------------------------------
CLIENT (client.cpp):
---------------------------------------------------------------
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsa;
WSAStartup(MAKEWORD(2,2), &wsa);
SOCKET clientSocket = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(5001);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // same machine
std::string message;
std::cout << "Enter message to send: ";
std::getline(std::cin, message);
sendto(clientSocket, message.c_str(), message.length(), 0,
(sockaddr*)&serverAddr, sizeof(serverAddr));
std::cout << "Message sent!" << std::endl;
closesocket(clientSocket);
WSACleanup();
return 0;
}
---------------------------------------------------------------
Terminal Command (Windows):
1) g++ client.cpp -o client -lws2_32
2) .\client.exe