在C++中实现简单的TCP/IP服务器和客户端

梦幻蝴蝶 2024-08-01 ⋅ 14 阅读

TCP/IP 是一种网络通信协议,广泛应用于互联网上的数据传输。在C++中,我们可以使用一些库来实现简单的TCP/IP服务器和客户端。本文将介绍如何使用C++编写一个简单的TCP/IP服务器和客户端程序。

TCP/IP服务器

首先,我们需要包含相关的头文件和库:

#include <iostream>
#include <cstring>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>

然后,我们需要定义一些常量和变量,包括服务器IP地址、端口号以及套接字描述符:

const int SERVER_PORT = 8080;
const char* SERVER_IP = "127.0.0.1";

int main() {
    int serverSocket;
    struct sockaddr_in serverAddress;
    char buffer[1024];

    // 创建套接字
    serverSocket = socket(AF_INET, SOCK_STREAM, 0);
    if (serverSocket < 0) {
        std::cerr << "Failed to create socket." << std::endl;
        return 1;
    }

接下来,我们需要设置服务器的IP地址和端口号:

    serverAddress.sin_family = AF_INET;
    serverAddress.sin_port = htons(SERVER_PORT);
    if (inet_pton(AF_INET, SERVER_IP, &(serverAddress.sin_addr)) <= 0) {
        std::cerr << "Invalid address/ Address not supported." << std::endl;
        return 1;
    }

然后,我们需要将套接字绑定到服务器的IP地址和端口号:

    if (bind(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) < 0) {
        std::cerr << "Failed to bind socket." << std::endl;
        return 1;
    }

接下来,我们需要开始监听客户端的连接请求:

    if (listen(serverSocket, 5) < 0) {
        std::cerr << "Failed to listen." << std::endl;
        return 1;
    }

最后,我们可以接受来自客户端的连接请求,并向客户端发送一条消息:

    std::cout << "Server is listening on port " << SERVER_PORT << std::endl;

    int clientSocket;
    struct sockaddr_in clientAddress;
    socklen_t clientAddressSize = sizeof(clientAddress);

    clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddress, &clientAddressSize);
    if (clientSocket < 0) {
        std::cerr << "Failed to accept client connection." << std::endl;
        return 1;
    }

    std::cout << "Client connected." << std::endl;
    send(clientSocket, "Hello from server!", strlen("Hello from server!"), 0);

最后,我们需要关闭套接字并释放资源:

    close(clientSocket);
    close(serverSocket);

    return 0;
}

TCP/IP客户端

和服务器类似,我们首先需要包含相关的头文件和库:

#include <iostream>
#include <cstring>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>

然后,我们需要定义一些常量和变量,包括服务器IP地址、端口号以及套接字描述符:

const int SERVER_PORT = 8080;
const char* SERVER_IP = "127.0.0.1";

int main() {
    int clientSocket;
    struct sockaddr_in serverAddress;
    char buffer[1024];

    // 创建套接字
    clientSocket = socket(AF_INET, SOCK_STREAM, 0);
    if (clientSocket < 0) {
        std::cerr << "Failed to create socket." << std::endl;
        return 1;
    }

接下来,我们需要设置服务器的IP地址和端口号:

    serverAddress.sin_family = AF_INET;
    serverAddress.sin_port = htons(SERVER_PORT);
    if (inet_pton(AF_INET, SERVER_IP, &(serverAddress.sin_addr)) <= 0) {
        std::cerr << "Invalid address/ Address not supported." << std::endl;
        return 1;
    }

然后,我们需要连接到服务器:

    if (connect(clientSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) < 0) {
        std::cerr << "Failed to connect to server." << std::endl;
        return 1;
    }

最后,我们可以接收来自服务器的消息,并在控制台上输出:

    memset(buffer, 0, sizeof(buffer));
    if (recv(clientSocket, buffer, sizeof(buffer), 0) < 0) {
        std::cerr << "Failed to receive message from server." << std::endl;
        return 1;
    }

    std::cout << "Message from server: " << buffer << std::endl;

最后,我们需要关闭套接字并释放资源:

    close(clientSocket);

    return 0;
}

以上就是一个简单的TCP/IP服务器和客户端的实现。通过学习和理解这个简单的例子,你可以进一步学习和掌握更复杂的网络编程技术。希望本文对你有所帮助!


全部评论: 0

    我有话说: