C++ Socket Server and Client Example: Simple Communication

This code demonstrates a basic C++ socket server and client implementation. The server listens on a specified port, accepts client connections, and sends a welcome message. The client connects to the server, receives the message, and displays it.

Server Code:

#include <iostream>
#include <winsock2.h>

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

int main()
{
    WSADATA wsaData;
    SOCKET serverSocket, clientSocket;
    SOCKADDR_IN serverAddr, clientAddr;
    int iRet, addrLen = sizeof(SOCKADDR_IN);

    // Initialize Winsock
    iRet = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iRet != NO_ERROR) {
        std::cerr << "Error: WSAStartup failed with error code " << iRet << std::endl;
        return -1;
    }

    // Create server socket
    serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (serverSocket == INVALID_SOCKET) {
        std::cerr << "Error: Failed to create server socket with error code " << WSAGetLastError() << std::endl;
        WSACleanup();
        return -1;
    }

    // Bind server socket to specified port
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = INADDR_ANY;
    serverAddr.sin_port = htons(12345);
    iRet = bind(serverSocket, (SOCKADDR*)&serverAddr, sizeof(SOCKADDR_IN));
    if (iRet == SOCKET_ERROR) {
        std::cerr << "Error: Failed to bind server socket with error code " << WSAGetLastError() << std::endl;
        closesocket(serverSocket);
        WSACleanup();
        return -1;
    }

    // Start listening for client requests
    iRet = listen(serverSocket, SOMAXCONN);
    if (iRet == SOCKET_ERROR) {
        std::cerr << "Error: Failed to listen on server socket with error code " << WSAGetLastError() << std::endl;
        closesocket(serverSocket);
        WSACleanup();
        return -1;
    }

    std::cout << "Server started and listening on port 12345..." << std::endl;

    // Wait for client connection request
    clientSocket = accept(serverSocket, (SOCKADDR*)&clientAddr, &addrLen);
    if (clientSocket == INVALID_SOCKET) {
        std::cerr << "Error: Failed to accept client connection with error code " << WSAGetLastError() << std::endl;
        closesocket(serverSocket);
        WSACleanup();
        return -1;
    }

    std::cout << "Client connected from " << inet_ntoa(clientAddr.sin_addr) << ":" << ntohs(clientAddr.sin_port) << std::endl;

    // Send welcome message to client
    const char* welcomeMsg = "Welcome to my server!";
    iRet = send(clientSocket, welcomeMsg, strlen(welcomeMsg), 0);
    if (iRet == SOCKET_ERROR) {
        std::cerr << "Error: Failed to send welcome message with error code " << WSAGetLastError() << std::endl;
        closesocket(clientSocket);
        closesocket(serverSocket);
        WSACleanup();
        return -1;
    }

    // Close sockets and release resources
    closesocket(clientSocket);
    closesocket(serverSocket);
    WSACleanup();

    return 0;
}

Client Code:

#include <iostream>
#include <winsock2.h>

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

int main()
{
    WSADATA wsaData;
    SOCKET clientSocket;
    SOCKADDR_IN serverAddr;
    char recvBuf[1024] = { 0 };
    int iRet;

    // Initialize Winsock
    iRet = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iRet != NO_ERROR) {
        std::cerr << "Error: WSAStartup failed with error code " << iRet << std::endl;
        return -1;
    }

    // Create client socket
    clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (clientSocket == INVALID_SOCKET) {
        std::cerr << "Error: Failed to create client socket with error code " << WSAGetLastError() << std::endl;
        WSACleanup();
        return -1;
    }

    // Specify server address and port
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // Server IP address
    serverAddr.sin_port = htons(12345); // Server port number

    // Connect to server
    iRet = connect(clientSocket, (SOCKADDR*)&serverAddr, sizeof(SOCKADDR_IN));
    if (iRet == SOCKET_ERROR) {
        std::cerr << "Error: Failed to connect to server with error code " << WSAGetLastError() << std::endl;
        closesocket(clientSocket);
        WSACleanup();
        return -1;
    }

    // Receive welcome message from server
    iRet = recv(clientSocket, recvBuf, sizeof(recvBuf), 0);
    if (iRet == SOCKET_ERROR) {
        std::cerr << "Error: Failed to receive welcome message with error code " << WSAGetLastError() << std::endl;
        closesocket(clientSocket);
        WSACleanup();
        return -1;
    }

    std::cout << "Server said: " << recvBuf << std::endl;

    // Close socket and release resources
    closesocket(clientSocket);
    WSACleanup();

    return 0;
}
C++ Socket Server and Client Example: Simple Communication

原文地址: https://www.cveoy.top/t/topic/nojT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录