码界工坊

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 FTP服务器如何实现匿名访问

    在Ubuntu上设置FTP服务器以实现匿名访问,可以使用vsftpdVery Secure FTP Daemon)这个流行的FTP服务器软件。以下是详细的步骤:1. 安装vsftpd首先,确保你的系统 ...

  • 个人如何注册域名?个人域名注册如何实现

    个人如何注册域名?个人域名注册如何实现?相信很多人都会有这样疑问,下面聚名网为你详解一下以上问题。个人域名注册知识大盘点1.一个域名只能被注册一次吗?答:是的,一个域名如果被注册是不能在被别人注册的, ...

  • 商标和域名有什么区别 域名和商标各自的优劣势

           关于商标和域名的一些关系,很多人都是迷迷糊糊的,其实商标和域名完全是两码事,那么商标和域名究竟有什么区别呢?域名和商标各自又有什么优势呢?一、使用范围传统商标的种类和构成有很多种,并且一 ...

  • 怎么证明域名所属权 你注册的域名怎么利用法律保护

           域名,表面上看就是一串地址,就像QQ号一样,对于这个虚拟的东西,怎么证明所属权呢?这肯定是很多人都没有思考的问题,有关域名所属权的证明,涉及一些法律知识,今天聚名网就来跟大家分享一下吧! ...

  • php配置文件centos如何修改

    在CentOS系统中,PHP配置文件通常位于/etc/php.ini。要修改PHP配置文件,请按照以下步骤操作:打开终端。使用文本编辑器打开/etc/php.ini文件。在这个例子中,我们将使用vi编 ...

  • 建网站有哪几个步骤?注册好域名之后要怎么做

    现在很多企业都开始建设自己的网站了,还有很多计算机专业的大学生也开始建立自己的网站,其中不乏很多建站小白,下面我们来说说建网站有哪几个步骤?注册好域名之后要怎么做?做网站,首先要了解网站有哪些部分组成 ...

  • 三级域名是什么样的?三级域名怎么解析?

    三级域名是什么样的?三级域名怎么解析?一个完整的域名一般都有两个或者两个部分组成,各个部分之间都是用英文符号"."来分隔,一般情况下可以用"."来判断域名的级数。 三级域名虽然看起来比较长,但在大型网 ...

  • 注册域名有什么用途?注册域名有没有用?

    注册域名有什么用途?注册域名有没有用?现如今,互联网应用技术广泛,涉及的领域也很多。虽然互联网技术普及,但是有不少网民在使用网络过程中依然会遇到注册域名的问题。有些企业为了方便管理、使用网络,会单独注 ...