Group B

Q7: Implement socket programming using C/C++/Java for the following: a) TCP Client and TCP Server. b) UDP Client and UDP Server

TCP and UDP Socket Programming

Solution and implementation for Q7 from Computer Networks (cnl).

7_tcp_ubuntu.txt Download
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
7_udp_ubuntu.txt Download
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
7_tcp_windows.txt Download
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
7_udp_windows.txt Download
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

Other Questions in Computer Networks

See All Available Questions
Download