117.info
人生若只如初见

Ubuntu C++网络编程如何实现

在Ubuntu上进行C++网络编程,你可以使用多种库和API。最常见的是使用BSD套接字API,它是UNIX和Linux系统上用于网络通信的标准接口。以下是一个简单的TCP服务器和客户端的示例,展示了如何在Ubuntu上使用C++和BSD套接字API进行网络编程。

TCP服务器示例

#include 
#include 
#include 
#include 
#include 

int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int opt = 1;
    int addrlen = sizeof(address);
    char buffer[1024] = {0};
    const char* hello = "Hello from server";

    // 创建套接字文件描述符
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }

    // 设置套接字选项
    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
        perror("setsockopt");
        exit(EXIT_FAILURE);
    }

    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(8080);

    // 绑定套接字到地址
    if (bind(server_fd, (struct sockaddr*)&address, sizeof(address)) < 0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }

    // 监听连接
    if (listen(server_fd, 3) < 0) {
        perror("listen");
        exit(EXIT_FAILURE);
    }

    // 接受连接
    if ((new_socket = accept(server_fd, (struct sockaddr*)&address, (socklen_t*)&addrlen)) < 0) {
        perror("accept");
        exit(EXIT_FAILURE);
    }

    // 读取数据
    read(new_socket, buffer, 1024);
    std::cout << buffer << std::endl;

    // 发送数据
    send(new_socket, hello, strlen(hello), 0);
    std::cout << "Hello message sent\n";

    // 关闭套接字
    close(new_socket);
    close(server_fd);

    return 0;
}

TCP客户端示例

#include 
#include 
#include 
#include 
#include 

int main() {
    int sock = 0;
    struct sockaddr_in serv_addr;
    const char* hello = "Hello from client";
    char buffer[1024] = {0};

    // 创建套接字文件描述符
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        std::cout << "\n Socket creation error \n";
        return -1;
    }

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(8080);

    // 将IPv4地址从文本转换为二进制形式
    if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
        std::cout << "\nInvalid address/ Address not supported \n";
        return -1;
    }

    // 连接到服务器
    if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
        std::cout << "\nConnection Failed \n";
        return -1;
    }

    // 发送数据
    send(sock, hello, strlen(hello), 0);
    std::cout << "Hello message sent\n";

    // 读取服务器的响应
    read(sock, buffer, 1024);
    std::cout << "Server: " << buffer << std::endl;

    // 关闭套接字
    close(sock);

    return 0;
}

要编译这些程序,你可以使用g++编译器:

g++ -o server server.cpp
g++ -o client client.cpp

然后,首先运行服务器:

./server

在另一个终端中运行客户端:

./client

这将创建一个简单的TCP服务器和客户端,它们可以在本地主机上相互通信。这只是一个基础的例子,实际的网络应用程序可能需要处理多个客户端连接、更复杂的协议和错误处理。此外,还有其他库如Boost.Asio、Qt Network等,它们提供了更高级的抽象和易用性。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe3c7AzsKBQNeBFQ.html

推荐文章

  • Ubuntu MySQL性能优化技巧有哪些

    Ubuntu MySQL性能优化可以通过多种技巧来实现,以下是一些关键的优化方法:
    硬件优化 选择合适的硬件:包括64位、高主频、高缓存的CPU,大内存,以及15000转...

  • ubuntu dhcp如何记录日志

    在Ubuntu系统中,DHCP服务器通常使用isc-dhcp-server软件包。要记录DHCP服务器的日志,请按照以下步骤操作: 打开DHCP服务器配置文件。使用文本编辑器打开/etc/d...

  • ubuntu如何配置dhcp服务器

    在Ubuntu上配置DHCP服务器通常涉及安装和配置ISC DHCP服务器(isc-dhcp-server)。以下是详细的步骤指南:
    1. 安装ISC DHCP服务器
    首先,打开终端并更...

  • Ubuntu VNC连接不上怎么办

    当Ubuntu VNC连接不上时,可以按照以下步骤进行排查和解决:
    1. 检查VNC服务器是否启动
    首先,确保VNC服务器已经启动。可以使用以下命令来启动VNC服务...

  • Ubuntu上C++多线程编程难吗

    Ubuntu上使用C++进行多线程编程可能会有一定的挑战性,但并不是不可克服的。多线程编程本身就比较复杂,尤其是在处理共享数据时,可能会遇到死锁、竞态条件等问题...

  • Ubuntu C++性能优化有哪些方法

    在Ubuntu系统上进行C++性能优化可以采取多种方法,以下是一些关键的优化策略:
    编译器优化 选择合适的编译器:GCC和Clang都是常用的编译器,它们提供了多种...

  • 如何彻底删除Ubuntu用户

    要彻底删除一个Ubuntu用户,您需要执行以下步骤: 打开终端(快捷键:Ctrl + Alt + T) 首先,确保您以root用户身份登录。如果当前不是root用户,请输入以下命令...

  • Ubuntu deluser命令的注意事项

    在使用 deluser 命令删除用户账户时,有几个注意事项需要牢记: 备份数据:在执行删除操作之前,务必备份用户的重要数据。deluser 命令会删除用户的主目录及其所...