码界工坊

htykm.cn
人生若只如初见

Ubuntu中C++如何进行网络通信

在Ubuntu中,C++进行网络通信通常使用套接字(socket)编程。套接字是一种允许不同计算机上的进程通过网络相互发送和接收数据的机制。以下是一个简单的TCP/IP网络通信示例,包括服务器端和客户端的代码。

服务器端

  1. 创建一个TCP套接字。
  2. 绑定套接字到一个IP地址和端口。
  3. 监听连接请求。
  4. 接受连接。
  5. 发送和接收数据。
  6. 关闭连接。
#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};    // 创建套接字文件描述符    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 << "Message from client: " << buffer << std::endl;    // 发送数据    send(new_socket, "Hello from server", 17, 0);    std::cout << "Hello message sent\n";    // 关闭套接字    close(new_socket);    close(server_fd);    return 0;}

客户端

  1. 创建一个TCP套接字。
  2. 连接到服务器的IP地址和端口。
  3. 发送和接收数据。
  4. 关闭连接。
#include #include #include #include #include int main() {     int sock = 0;    struct sockaddr_in serv_addr;    char *hello = "Hello from client";    char buffer[1024] = { 0};    // 创建套接字文件描述符    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {         std::cout << " Socket creation error ";        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 << "Invalid address/ Address not supported ";        return -1;    }    // 连接到服务器    if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {         std::cout << "Connection Failed ";        return -1;    }    // 发送数据    send(sock, hello, strlen(hello), 0);    std::cout << "Hello message sent\n";    // 读取数据    read(sock, buffer, 1024);    std::cout << "Message from server: " << buffer << std::endl;    // 关闭套接字    close(sock);    return 0;}

编译和运行

  1. 将服务器端代码保存为server.cpp,客户端代码保存为client.cpp
  2. 在终端中编译代码:
g++ -o server server.cppg++ -o client client.cpp
  1. 运行服务器:
./server
  1. 在另一个终端中运行客户端:
./client

这样,客户端就会连接到服务器,发送一条消息,并接收服务器的响应。

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

推荐文章

  • vsftp在Debian上的故障排查方法

    在Debian上使用vsftpd时,可能会遇到各种故障。以下是一些常见的故障排查方法:vsftpd无法启动检查服务状态:sudo systemctl status vsftpd如果服务无法启动,查看详 ...

  • 怎样去选择一个好的域名注册 好的域名对网站有多重要

    很多人在建设网站的时候随便考虑一个域名就草草上线,导致后来网站难以优化、迟迟没权重、用户难记住等等,其实这样的随便注册域名是非常错误的,这么说,作为一个从事seo多年的人,我可以负责任的告诉你一个好的 ...

  • .space域名是什么?.space域名有什么优点?

    .space域名是什么?.space域名有什么优点?总有新的顶级域名出现,在现在互联网飞速发展的时代,新的后缀层出不穷。那么.space域名如何呢?.space域名是什么space有着空间、太空等含义 ...

  • hk域名的含义是什么?为什么企业会选择hk域名

    很多新手站长听说过hk域名,但是具体的情况不是很了解。今天小编就来给大家详细的介绍下,hk域名的含义是什么?为什么企业会选择hk域名?hk域名的含义是什么.hk域名是香港独有的顶级国际域名,具有鲜明的 ...

  • Debian编译Java需要哪些依赖

    在Debian系统上编译Java程序,通常需要以下依赖和工具:JDKJava Development Kit):这是编译Java代码的必要工具,包含了Java编译器javac)和Java运行时环境JR ...

  • 美国的顶级域名是哪个 如何购买美国域名

    美国的顶级域名是哪个?如何购买美国域名?众所周知,现在的域名后缀种类相当多,既有com/net/org这种通用域名,也有cn/uk这种带有国家标志的域名。那么,在众多的国家域名中,美国的顶级域名是哪个 ...

  • 域名注册有什么需要注意的 域名购买有哪些技巧

    现在的社会,人人对于互联网多多少少都有认识,而互联网中必不可缺就是域名行业,相信每个互联网从业者都想拥有一个属于自己的域名,那么域名获取的途径除了域名注册就是域名购买了,关于域名注册和域名购买今天聚名 ...

  • 什么是中文域名 注册中文域名有哪些好处

    什么是中文域名?注册中文域名有哪些好处?中文域名和英文域名一样,都是互联网的门牌,但是还有很多人对于中文域名有疑问,那么,什么是中文域名?注册中文域名有哪些好处?下面就由小编详细的解答下。什么是中文域 ...