首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

epoll实现简单聊天程序

网络技术 21.34KB 32 需要积分: 1
立即下载

资源介绍:

epoll实现简单聊天程序, 终端输入接收cli端数据,c 和c++ 实现ser c实现cli,c++方式支持多个客户端
#include #include #include #include #include #include #include #include #define SOCKET_PATH "/tmp/chat.sock" #define BUFFER_SIZE 1024 int main() { int server_socket, client_socket; struct sockaddr_un server_addr, client_addr; socklen_t client_len; int cli_fd = 0; // 创建 Unix 域套接字 server_socket = socket(AF_UNIX, SOCK_STREAM, 0); if (server_socket == -1) { perror("socket"); exit(EXIT_FAILURE); } // 清除旧的 socket 文件 unlink(SOCKET_PATH); // 准备地址结构 memset(&server_addr, 0, sizeof(server_addr)); server_addr.sun_family = AF_UNIX; strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - 1); // 绑定套接字 if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("bind"); exit(EXIT_FAILURE); } // 开始监听 if (listen(server_socket, 1) == -1) { perror("listen"); exit(EXIT_FAILURE); } // 接受客户端连接 /*client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_len); if (client_socket == -1) { perror("accept"); exit(EXIT_FAILURE); } // 设置套接字为非阻塞模式 int flags = fcntl(client_socket, F_GETFL, 0); fcntl(client_socket, F_SETFL, flags | O_NONBLOCK); */ char buffer[BUFFER_SIZE]; struct epoll_event events[3]; int epoll_fd = epoll_create1(0); if (epoll_fd == -1) { perror("epoll_create1"); exit(EXIT_FAILURE); } // 添加标准输入和客户端套接字到 epoll struct epoll_event event; event.events = EPOLLIN; event.data.fd = STDIN_FILENO; if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, STDIN_FILENO, &event) == -1) { perror("epoll_ctl (stdin)"); exit(EXIT_FAILURE); } event.events = EPOLLIN | EPOLLET; // 边缘触发模式 event.data.fd = server_socket; if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, server_socket, &event) == -1) { perror("epoll_ctl (client_socket)"); exit(EXIT_FAILURE); } while (1) { int nready = epoll_wait(epoll_fd, events, 3, -1); if (nready == -1) { perror("epoll_wait"); break; } for (int i = 0; i < nready; ++i) { if (events[i].data.fd == STDIN_FILENO) { if (fgets(buffer, BUFFER_SIZE, stdin) != NULL) { if(cli_fd != 0) write(cli_fd, buffer, strlen(buffer)); // 发送消息给客户端 } }else if (events[i].data.fd == server_socket) { printf("events[i].data.fd == server_socket accept\n"); client_len = sizeof(client_addr); client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_len); if (client_socket == -1) { perror("accept"); continue; } event.events = EPOLLIN | EPOLLET; // 边缘触发模式 event.data.fd = client_socket; if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, client_socket, &event) == -1) { perror("epoll_ctl (client_socket)"); continue; } cli_fd = client_socket; }else/* if (events[i].data.fd == client_socket) */{ //printf("enter read, events[j].data.fd = 0x%x\n", events[i].data.fd); ssize_t nread = read(events[i].data.fd, buffer, BUFFER_SIZE - 1); if (nread > 0) { buffer[nread] = '\0'; printf("Received: %s", buffer); } else if (nread == 0) { printf("Client disconnected.\n"); epoll_ctl(epoll_fd, EPOLL_CTL_DEL, events[i].data.fd, NULL); close(events[i].data.fd); cli_fd = 0; continue; } else { perror("Error reading from client"); break; } } } } // 清理 close(client_socket); close(server_socket); close(epoll_fd); unlink(SOCKET_PATH); return 0; }

资源文件列表:

epoll.zip 大约有7个文件
  1. u_e_cli 17.41KB
  2. u_epoll_cli.c 2.78KB
  3. u_epoll_ser.c 4.39KB
  4. u_epoll_ser.cpp 4.66KB
  5. u_e_ser 17.52KB
  6. cpp 26.59KB
  7. Makefile 175B
0评论
提交 加载更多评论
其他资源 基于SSM实现的酒店后台管理系统(源码+数据库).zip
酒店后台管理系统简介 这是一个基于SSM框架开发的精简酒店后台管理系统,旨在提供高效的住客、房间和会员信息管理功能,同时支持数据的导出下载。系统采用layui-Qadmin模板设计,整体风格简约大气,操作方便快捷,欢迎各位专业人士下载使用或进行二次开发,期待各方提出宝贵意见。 安装教程 安装步骤如下: 1.导入至您的IDE工具中。 2.配置Tomcat服务器和MySQL数据库。 3.部署并运行应用程序,确保应用程序上下文路径配置为根路径 "/". 使用说明 系统使用方法: 4.打开系统后,进入登录页面进行身份验证。 5.在左侧菜单中选择相应功能,如添加住客、查看房间列表等操作。 部分页面截图 6.登录页 7.首页 8.添加住客 9.房间列表显示 以上是对该酒店后台管理系统的简要介绍和使用说明。系统设计简洁明了,适合酒店管理人员快速有效地管理相关信息。如有任何建议或意见,请随时联系我们。
education.zip
education
easyPlayer视频流https://blog.csdn.net/weixin-42120669/article/deta
vue3直播视频流easy-player easyPlayer视频流 https://blog.csdn.net/weixin_42120669/article/details/140853267
GDAL2.2.3 for Android
GDAL2.2.3 for Android 使用环境: compileSdkVersion 28 buildToolsVersion '28.0.3' defaultConfig { minSdkVersion 23 targetSdkVersion 28 versionCode 3 versionName '3.0' testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true }
Xshell5 终端软件下载安装
Xshell 5是一款功能强大且使用便捷的安全终端仿真软件,专为Windows平台设计。它支持SSH1、SSH2协议以及Microsoft Windows平台的TELNET协议,允许用户通过互联网安全地连接到远程主机,进行高效的管理和通信。Xshell 5凭借其创新性的设计和丰富的功能,成为IT运维人员和系统管理员在复杂网络环境中不可或缺的工具。 使用教程 新建会话:打开Xshell 5,点击“文件”-“新建会话”,输入远程服务器的IP地址和端口号,选择会话类型(如SSH),并输入用户名和密码,点击“连接”即可建立远程连接。 会话管理:Xshell 5提供会话管理器,允许用户轻松创建、编辑和启动多个会话。用户还可以定义会话属性,如终端类型、字符编码等。 串口通信:除了网络连接外,Xshell 5还支持串口通信。用户可以通过“新建”-“串口”选项配置串口参数(如波特率、数据位等),建立与串口设备的连接。
微信小程序实例+资料.zip
这是当时网课学习的实践项目,里面包含了小程序相关资料和代码,希望对学习前端、测试的朋友有一些帮忙
微信小程序实例+资料.zip 微信小程序实例+资料.zip 微信小程序实例+资料.zip
“基于Java的聊天室”-作业报告word+源代码
“基于Java的聊天室”-作业报告word+源代码
“基于Java的聊天室”-作业报告word+源代码 “基于Java的聊天室”-作业报告word+源代码 “基于Java的聊天室”-作业报告word+源代码
技嘉z87x oc锁倍频bios
技嘉z87x oc主板锁倍频bios,f9e