码界工坊

htykm.cn
人生若只如初见

传奇单职业sf发布网

传奇单职业sf发布网_传奇单职业sf发布网大全_sf999今日新开传奇

在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/hao/625b599369.html

推荐文章

  • ubuntu下nodejs内存不足怎么解决

    在Ubuntu下,如果遇到Node.js内存不足的问题,可以尝试以下几种方法来解决:增加Node.js的内存限制使用 --max-old-space-size参数:你可以在启动Node.js应用时,通 ...

  • 如何做二级域名?要如何分析二级域名?

    如何做二级域名?要如何分析二级域名?我们都知道域名分为顶级域名、一级域名和二级域名,那么如何区分这些类型的域名呢?例如,像xxx.com这样的域名称为国际顶级域名,像xx.com.cn,实际上是二级域 ...

  • 注册完域名后能干嘛 注册域名的用途

    绞尽脑汁选择一个既能体现品牌特色又能反映商业内容的域名,并成功完成注册,这并不是一件简单的事情,很多企业在给自己选择域名的时候都会有过很多纠结,此时,你对企业未来的经营目标有了大致的方向,是不是还迟迟 ...

  • 新手投资域名要知道什么?有哪些域名投资知识?

    新手投资域名要知道什么?有哪些域名投资知识?域名投资是个水很深的行业,虽然说域名投资资金门槛低,压力小,但是变现不灵活,现在好的域名资源越来越少了,可投资的域名越来越少,跟这个域名交易市场的火热程度成 ...

  • 如何配置Ubuntu Apache自动重启

    要配置Ubuntu Apache自动重启,您可以使用systemd服务管理器。以下是配置Apache自动重启的步骤:打开终端快捷键:Ctrl + Alt + T)。确保您已经安装了Apache。如果没 ...

  • .dog域名是什么 .dog域名注册价值大么

    说到狗,它是中国最早驯养的动物之一,属于“六兽”之一,早在先秦时期,中国就有以草祭狗上天的礼节。所谓“天地不仁,万物如反刍犬”指的就是这个物种,我们日常生活中对于狗这种动物也是疼爱有加,那么域名里面有 ...

  • 域名后缀怎么选 注册域名选尾缀建议

    随着互联网市场对域名需求的不断增加,市场上的域名注册商规模不一、鱼龙混杂,域名后缀也不尽相同。那么对于我们来说,如何选择域名的后缀呢?一、.com域名在这种背景下,域名越来越受欢迎,随之而来的是域名价 ...

  • .net域名为什么那么好 企业注册net域名意义是什么

    .net是什么域名?net是英语internet(internet)或network(network)的缩写。.net域名具有“网络”的含义,通常被从事互联网相关网络服务的组织或公司使用。.net是世 ...