Menu

Client server communication

1. The Server Code (server.cpp)

The server "listens" for an incoming connection. Once a client connects, it enters a loop where it first receives a message and then sends a response back.

 

C++

#include <iostream>

#include <string.h>

 

#ifdef _WIN32

    #include <winsock2.h>

    #include <ws2tcpip.h>

    #pragma comment(lib, "ws2_32.lib")

#else

    #include <sys/socket.h>

    #include <arpa/inet.h>

    #include <unistd.h>

    #define SOCKET int

    #define INVALID_SOCKET -1

    #define SOCKET_ERROR -1

    #define closesocket close

#endif

 

int main() {

#ifdef _WIN32

    WSADATA wsaData;

    WSAStartup(MAKEWORD(2, 2), &wsaData);

#endif

 

    SOCKET server_fd = socket(AF_INET, SOCK_STREAM, 0);

    sockaddr_in address;

    address.sin_family = AF_INET;

    address.sin_addr.s_addr = INADDR_ANY;

    address.sin_port = htons(8080);

 

    bind(server_fd, (struct sockaddr*)&address, sizeof(address));

    listen(server_fd, 3);

 

    std::cout << "Server listening on port 8080...\n";

    SOCKET new_socket = accept(server_fd, NULL, NULL);

 

    char buffer[1024] = {0};

    const char* server_msg = "Hello from Server!";

 

    // 1. Receive from Client

    recv(new_socket, buffer, 1024, 0);

    std::cout << "Client says: " << buffer << std::endl;

 

    // 2. Send to Client

    send(new_socket, server_msg, strlen(server_msg), 0);

    std::cout << "Response sent.\n";

 

    closesocket(new_socket);

    closesocket(server_fd);

#ifdef _WIN32

    WSACleanup();

#endif

    return 0;

}

2. The Client Code (client.cpp)

The client initiates the connection. In this flow, it sends a message first and then waits for the server’s reply.

 

C++

#include <iostream>

#include <string.h>

 

#ifdef _WIN32

    #include <winsock2.h>

    #include <ws2tcpip.h>

    #pragma comment(lib, "ws2_32.lib")

#else

    #include <sys/socket.h>

    #include <arpa/inet.h>

    #include <unistd.h>

    #define SOCKET int

    #define INVALID_SOCKET -1

    #define closesocket close

#endif

 

int main() {

#ifdef _WIN32

    WSADATA wsaData;

    WSAStartup(MAKEWORD(2, 2), &wsaData);

#endif

 

    SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);

    sockaddr_in serv_addr;

    serv_addr.sin_family = AF_INET;

    serv_addr.sin_port = htons(8080);

    

    // Use "127.0.0.1" for same machine, or server's IP for different machines

    inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr);

 

    if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {

        std::cout << "Connection Failed\n";

        return -1;

    }

 

    const char* client_msg = "Hello from Client!";

    char buffer[1024] = {0};

 

    // 1. Send to Server

    send(sock, client_msg, strlen(client_msg), 0);

    std::cout << "Message sent to server.\n";

 

    // 2. Receive from Server

    recv(sock, buffer, 1024, 0);

    std::cout << "Server replied: " << buffer << std::endl;

 

    closesocket(sock);

#ifdef _WIN32

    WSACleanup();

#endif

    return 0;

}