基于handy的聊天室

2024-03-30 19:32
文章标签 聊天室 handy

本文主要是介绍基于handy的聊天室,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

handy是c++的网络库,其简单易用,容易上手。

github地址:

https://github.com/yedf/handyicon-default.png?t=LA46https://github.com/yedf/handy
以下便实现了一个聊天室,任意一个人发送的数据会被转发给其他所有人,参考的是示例中的chat.cc,并做了一些修改,代码如下:

#include <handy/handy.h>
#include <map>using namespace std;
using namespace handy;int main(int argc, const char *argv[]) {setloglevel("TRACE");//连接管理容器map<intptr_t, TcpConnPtr> users;  //生命周期比连接更长,必须放在Base前EventBase base;Signal::signal(SIGINT, [&] { base.exit(); });int userid = 1;//监听8888端口TcpServerPtr chat = TcpServer::startServer(&base, "", 8888);exitif(chat == NULL, "start tcpserver failed");chat->onConnCreate([&] {TcpConnPtr con(new TcpConn);//客户端连接与断开事件con->onState([&](const TcpConnPtr &con) {if (con->getState() == TcpConn::Connected) {con->context<int>() = userid;users[userid] = con;userid++;} else if (con->getState() == TcpConn::Closed) {users.erase(con->context<int>());}});//客户端读事件这里不用onMsg,onMsg封装了整包检验功能,这里读原始数据con->onRead([&](const TcpConnPtr &con) {int cid = con->context<int>();//客户端计数int sended = 0;//转发给其他所有用户for (auto &pc : users) {if (pc.first != cid) {sended++;//以下代码存在问题,读缓冲区会被清空// pc.second->send(con->getInput());pc.second->send(con->getInput().data(),con->getInput().size());}}//清空读缓冲区con->getInput().clear();});return con;});base.loop();info("program exited");return 0;
}

这篇关于基于handy的聊天室的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/862374

相关文章

C/C++ 网络聊天室在线聊天系统(整理重传)

知识点: TCP网络通信 服务端的流程: 1.创建socket套接字 2.给这个socket绑定一个端口号 3.给这个socket开启监听属性 4.等待客户端连接 5.开始通讯 6.关闭连接 解释: socket:类似于接口的东西,只有通过这个才能跟对应的电脑通信。 每一台电脑都有一个IP地址,一台电脑上有多个应用,每个应用都会有一个端口号。 socket一般分为两种类型,一种是通讯,一种是监听

9.7(UDP局域网多客户端聊天室)

服务器端 #include<myhead.h>#define SERIP "192.168.0.132"#define SERPORT 8888#define MAX 50//定义用户结构体typedef struct{struct sockaddr_in addr;int flag;}User;User users[MAX];//用户列表void add_user(struct s

项目9-网页聊天室9(测试报告)

1.项目背景 2.测试功能 3.测试计划 3.1 功能测试 3.1.1 测试用例 3.1.2 实际执行测试的部分操作步骤/截图 3.2 自动化测试 自动化测试参考: 3.3 性能测试 3.3.1 登陆测试 3.3.2 难点

WebSocket 聊天室

初学WebSocket,写了个聊天程序,感觉现在的推送比以前轮询好多了。 本Demo页面就是个简单的html文件,服务器用的Java 1.7+tomcat 7 页面截图: 有兴趣的同学可以一起交流,欢迎批评指正^_^ 源码地址:http://download.csdn.net/detail/u013314786/9469178

【MySQL_JDBC】Day23-Day28 数据库基础、JDBC基础、聊天室3.0

数据库 数据库基本概念 数据库DataBase 定义: 保存数据的仓库就称为数据库 例如 编写一个用户管理系统,可以让用户在我们编写的系统上进行注册等操作,此时就涉及到了保存用户数据的操作,目前我们的做法可以将一个用户信息以一个User对象形式表示,然后利用IO知识中的文件流与对象流将对象序列化都写入XXX.obj文件中保存。当有大量的obj文件后,可以使用一个专门的目录"users"

UDP简单聊天室创建

目录 一.   服务端模块实现 二.   处理聊天消息模块实现 三.   调用服务端模块实现 四.   客户端模块实现 五.   效果展示 本文介绍了如何用UDP创建一个简单的聊天室。 一.   服务端模块实现 服务端仍然沿用我们前面的思想(高内聚低耦合),因此我们用一下上一篇UDP英译汉网络词典的服务端实现(点此查看)。 #pragma once#include <ios

NodeJs小试牛刀--聊天室搭建

最近研究聊天室功能,准备用nodejs实现。下面是自己的尝试!! nodejs的安装这里就不详细赘述了。 程序创建 引入required模块 var express = require('express');var app = express();var http = require('http').Server(app); 创建监听端口 http.listen(8000, f

Unity3D网络之Socket聊天室初探

首先创建一个服务端程序,这个程序就用VS的控制台程序做就行了。 using System;   using System.Collections.Generic;   using System.Linq;   using System.Text;   using System.Net.Sockets;       namespace SocketServer   {       class Pr

Python 实时聊天室搭建:发布订阅频道API实战应用

大家好!今天我要和大家分享一个超级酷炫的项目——使用Python搭建一个实时聊天室。在这个项目中,我们将深入探索一个强大的工具——发布订阅频道API,它将为我们的聊天室带来实时互动的魔力。 在这个信息爆炸的时代,实时通信已经成为我们生活中不可或缺的一部分。无论是社交媒体上的即时消息,还是在线游戏中的实时对战,实时通信技术都在背后默默支撑着我们的每一次互动。今天,我将带你走进Python的世界,一

【JAVA CORE_API】Day21 Map接口、在线聊天室v3.0、Java的反射机制(P1)

Map接口 Map接口 Map是Java中用于存储键值对(key-value pairs)的接口,每个键(key)对应一个值(value)。它不允许重复的键,但允许不同的键映射相同的值。 关键特点: 键值对存储:每个key对应一个值,使用key来获取对应的值; 不允许重复key:一个key只能存在一次,重复key会覆盖旧值; 常用实现类:HashMap、TreeMap、LinkedH