码界工坊

htykm.cn
人生若只如初见

CentOS C++网络编程怎样实现

在CentOS上进行C++网络编程,通常会使用套接字(socket)API。以下是一个简单的TCP服务器和客户端的示例,展示了如何在CentOS上使用C++进行网络编程。

1. 安装必要的开发工具

首先,确保你已经安装了gccmake等开发工具。如果没有安装,可以使用以下命令进行安装:

sudo yum groupinstall "Development Tools"

2. 编写TCP服务器代码

创建一个名为tcp_server.cpp的文件,并添加以下代码:

#include #include #include #include #include #define PORT 8080int 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";    // Creating socket file descriptor    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {         perror("socket failed");        exit(EXIT_FAILURE);    }    // Forcefully attaching socket to the port 8080    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(PORT);    // Forcefully attaching socket to the port 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;}

3. 编写TCP客户端代码

创建一个名为tcp_client.cpp的文件,并添加以下代码:

#include #include #include #include #include #define PORT 8080int main() {     struct sockaddr_in serv_addr;    int sock = 0;    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(PORT);    // Convert IPv4 and IPv6 addresses from text to binary form    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;}

4. 编译代码

使用g++编译服务器和客户端代码:

g++ -o tcp_server tcp_server.cppg++ -o tcp_client tcp_client.cpp

5. 运行服务器和客户端

首先,在一个终端中运行服务器:

./tcp_server

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

./tcp_client

你应该会看到服务器和客户端之间的通信输出。

6. 调试和优化

根据需要,你可以添加更多的错误处理、日志记录和功能来优化你的网络应用程序。

通过以上步骤,你可以在CentOS上使用C++进行基本的网络编程。

未经允许不得转载 » 本文链接:http://htykm.cn/html/773f7099156.html

推荐文章

  • Debian JSP如何实现缓存机制

    在Debian系统上使用JSPJavaServer Pages)实现缓存机制,可以通过多种方式来提高性能和减少服务器负载。以下是一些常见的方法:1. 使用Servlet容器内置的缓存机制大多数Serv ...

  • 填报志愿!AI小聚来帮忙!

    俗话说七分考,三分报填报志愿需要注意哪些事项?学校和专业到底哪个更重要?兴趣和就业到底应该怎么选?这是很多考生和家长最头疼的事情今年更是有1200多万考生,竞争尤为激烈不妨,问问AI小聚!辅助各位考生 ...

  • minion是什么意思?

    "Minion" 一词在英语中的意思是奴才、仆人或随从,通常是指为他人服务的下属或助手。这个词也经常用来形容那些无私地为他人服务或忠实的追随者。在流行文化中,"minion" 也指小黄人,即《神偷奶爸 ...

  • 7z文件用什么打开?7z文件怎么解压

    7z文件是一种压缩文件格式,通常用于存储和传输大量的文件和数据。如果你下载了一个7z文件,你可能需要一个特定的程序来打开和解压它。在本文章中,我们将讨论如何打开和解压7z文件。一:用什么打开7z文件? ...

  • CentOS readdir如何实现递归读取

    在 CentOS 系统中,你可以使用 find命令来实现递归读取目录find /path/to/directory -type d这个命令会从指定的目录/path/to/directory)开始,递归 ...

  • 6岁孩子编程入门优先学什么

    对于一个6的孩子来说,编程入门的最佳方法是选择一门易于学习和理解的编程语言,并从基础开始逐步学习。以下是几个适合孩子入门的编程语言:1.ratch:Scratch 是一个易于使用的基于图形化编程语言。 ...

  • 后台app刷新有什么用?app后台刷新要不要开啊

    随着移动互联网的普及和发展,更多的APP已经成为了人们日常生活不可或缺的一部分。但是,在手机中启动APP时打开的是上一次最后退出时的页面,这时如果不刷新,可能会影响用户体验和信息的实时性。那么后台ap ...

  • 什么是语雀?怎么用?

    所谓语雀其实就是采用了“结构化知识库管理”,其形式与图书目录相似。不同于其它产品,语雀上的每个文档都必须属于特定的知识库,语雀希望通过这样的产品设计,能从源头上帮助用户建立知识管理意识,培养良好的知识 ...