社区
网络及通讯开发
帖子详情
关于写即时通讯的一些基本问题!
bcbnewbie
2005-11-02 03:57:38
以前没有接触过网络通讯,现在准备写一个即时通讯的工具,要实现如下功能:
1.同时在线1000人左右聊天
2.音频、视频聊天
3.文件传输
4.简单的对战游戏
5.可以群聊,也可以点对点的聊天
现在的问题是用BCB戴的TSocketServer和TSocketClient能不能实现上述功能,性能如何。因为我搜索了以前的帖子好像用两个控件不如直接用Socket API那样好。我对Socket API几乎没有了解,请推荐一本Socket API编程的书。
...全文
653
29
打赏
收藏
关于写即时通讯的一些基本问题!
以前没有接触过网络通讯,现在准备写一个即时通讯的工具,要实现如下功能: 1.同时在线1000人左右聊天 2.音频、视频聊天 3.文件传输 4.简单的对战游戏 5.可以群聊,也可以点对点的聊天 现在的问题是用BCB戴的TSocketServer和TSocketClient能不能实现上述功能,性能如何。因为我搜索了以前的帖子好像用两个控件不如直接用Socket API那样好。我对Socket API几乎没有了解,请推荐一本Socket API编程的书。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
29 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
happyct
2005-11-14
打赏
举报
回复
其中还做了几个不大不小的控件。有点模仿QQ和MSN的感觉。自我感觉不错。如果有需要的,可以向我索取,可惜不能贴图。
happyct
2005-11-14
打赏
举报
回复
总结:
1、对于某某控件好,某某控件不好这样的评论,一般来说,都是不客观的。那是开发者自己水平问题(当然我的水平也不行)
2、要P2P,请用UDP,TCP没办法实现的,除非限于局域网或都是公网
3、请做好详尽的系统分析,工程约大,这项工作越重要。这个项目的的系统分析时间是1个月,除系统分析文档外,其他文档还没写
4、自我感觉速度还比较快,中间遇到过2次问题,都是安吉儿帮忙解决的,在此谢过
happyct
2005-11-14
打赏
举报
回复
我做这个项目也做了3个月了。用的是delphi开发
用的TindyUdpServer,目的是P2P
目前已经具有的功能:
1. 文件收发:支持文件托放操作,收发过程中的信息交互(如取消、中止、错误),支持一对多发送
2. 信息收发:包括文字、手写信息、屏幕拷贝、表情图片(可自行添加),声音信息(即录音),这些信息可以混合编辑
3. 魔法表情:除系统提供的之外,用户可自由的自行添加
4. 屏幕震动
5. 输入状态提示功能,对方开始及结束输入都可以及时看到
6. 来信提示:托盘图标闪动、主窗体上方提示闪动、弹出提示窗口,任务栏闪动等
7. 头像设定及编辑:用户可自定义头像,系统提供了一个简单方便的编辑工具,可直接对头像进行设定编辑
8. 在线状态设定及个人文字说明
9. 历史消息查询功能(正在修改)
10. 临时群组(多方会谈):包括创建、添加、修改及删除。非组创建者只能添加用户,不能删除
11. 系统皮肤整体变色
12. 用户自定义链接。类似于收藏夹
插件接口:
消息收发接口
文件收发接口(其实就是一个插件)
上述功能已经完成,同时对50个在线用户的群聊没什么问题
同时对30个用户收发文件没什么问题
视频语音还没做
我来看看CB
2005-11-14
打赏
举报
回复
确实是个大工程。。。
「已注销」
2005-11-14
打赏
举报
回复
学习
bcbnewbie
2005-11-09
打赏
举报
回复
老兄,能留个QQ号交流一下吗?
linuxghs
2005-11-09
打赏
举报
回复
我也是用bcb开发的即时通讯软件,用的udp,现在效果很好
我用的也是第二种方法。除非是离线消息才要在server存储。
constantine
2005-11-09
打赏
举报
回复
第二种好多了,现在的即时通基本上都是这样,但是不通的时候会让server转发
bcbnewbie
2005-11-09
打赏
举报
回复
qq:124271328]
bcbnewbie@21cn.com
谢谢!
alloutoflove
2005-11-09
打赏
举报
回复
偶是进来学习的.
niiv
2005-11-09
打赏
举报
回复
请留email/QQ/msn。
niiv
2005-11-08
打赏
举报
回复
和 constantine(飘遥的安吉儿) 有类似感觉,Indy也不见得很好。
1000个客户端同时连接服务器时,TSocketServer可以3秒左右完成所有连接,如果每客户端通过服务器转发数据,每秒1K Bytes,服务器占用的资源几乎为0%。
注:测试PC,CPU=赛扬1G,内存=256M,出入口带宽最高达1MBytes/s。
UDP方面用Indy的好些
bcbnewbie
2005-11-08
打赏
举报
回复
谢谢大家回复!
想请教 niiv(一叶) 对于多人聊天的方案,就性能方面有什么看法。
比如说方案一由服务器转发用户的所有的数据包,服务器采用阻塞+多线程 或者非阻塞方式
第二种服务器转发登录用户的好友的IP,让登录用户和他的好友直接p2p的方式联系,在客户端用多线程+自己定义的消息格式。
那个更好一点,或则有更好的方案?
niiv
2005-11-08
打赏
举报
回复
测试结构如下:
服务器处于公网(电信级机房托管服务器),
服务器配置:CPU=赛扬1G,内存=256M,出入口带宽最高达1MBytes/s。
使用BCB的TSocketServer
客户端使用BCB的TSocketClient,生成1000个实例后,使用循环连接该服务器的同一端口(也就是相同IP的相同端口).
服务器端记录第1个连接到第1000个连接(OnAccept事件)的时间差。
最短时间3秒以下,一般在10秒左右。
个人用TSocketServer和TSocketClient有4年了,无论从效率和稳定性上都非常好,但也经常看到论坛上有人说丢包之类的问题,我没碰到过,估计是程序有问题。
To: BCB2006(i like bcb)
TSocketServer,无法区分你的数据是否为“文件或语音视频”,只视乎数据传送量。
BCB2006
2005-11-08
打赏
举报
回复
楼上的你是如何测试1000个并发连接的?如果是传送文件或语音视频呢?
这么说TSocketServer很强啊
constantine
2005-11-07
打赏
举报
回复
indy 很好我到不见的,还是有些不见人意,版本变化比较大,对于升级不好
如果你用TSocketServer和TSocketClient,那么是无法实现p2p的,p2p只能用udp
不过如果要简单用server转发很简单,不过这样会增加server的负担
另外你说的情况不会出现,既然是多线程,那么每个client的线程都是独立的,“那么其他用户是不是可能会得不到服务”这个不用担心
如果真要做到你提的要求,你可以考虑用indy的idudpserver控件来做
bcbnewbie
2005-11-07
打赏
举报
回复
谢谢大家回帖,我的想法就是服务器指转发更行IP的管理,然后客户端采用点对点直接联系。定义一些通讯命令字。还有一点疑问采用阻塞加线程的方式如果同时有几百个连接请求,服务器不是要同时开几百个线程对应,那不是对服务器的要求很高,,如果是非阻塞的方式,假设一个客户连接的请求处理很长时间,那么其他用户是不是可能会得不到服务?
wyb_45
2005-11-07
打赏
举报
回复
socket api比较简单 也跨平台
就是要自己处理 多线程
WORD wVersionRequested;
WSADATA wsaData;
Sleep(100);
wVersionRequested=MAKEWORD(2,0);
int err=WSAStartup(wVersionRequested,&wsaData);
。。。
int Connect_Server(AnsiString host, u_short port)
{
int i, s;
long* p;
hostent* phe;
sockaddr_in sin;
DWORD Address;
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
Address = inet_addr(host.c_str());
if (Address == INADDR_NONE) {
phe = gethostbyname(host.c_str());
if (phe) {
p = (long*)(*phe->h_addr_list);
sin.sin_addr.s_addr = *p;
}
}
else {
i = inet_addr(host.c_str());
if (i!=-1)
sin.sin_addr.s_addr = i;
}
s = socket(PF_INET,SOCK_STREAM,0);
if (s == INVALID_SOCKET)
return 0;
if (connect(s,(struct sockaddr FAR *)&sin,sizeof(sin))<0) // == SOCKET_ERROR) {
{
closesocket(s);
return(-1);
//int i = WSAGetLastError();
// return 0;
}
else
return s;
}
BOOL RecvStream(SOCKET s, TMemoryStream* Stream)
{
char buf[PACKAGESIZE];
//int namelen;
int pktlen;
int i = 1;
for (;;i++) {
Application->ProcessMessages();
if ((pktlen = recv(s,buf,sizeof(buf),0))<0) {
//接收数据失败
return false;
}
else if (pktlen == 0)
break;
else {
Stream->Seek(0,soFromEnd);
Stream->Write(buf,pktlen);
}
}
Stream->Seek(0,soFromBeginning);
closesocket(s);
return true;
}
if((pktlen =send(sockfd,buf,send_len,0))<=0)
{
。。。
break;
}
我不懂电脑
2005-11-07
打赏
举报
回复
Indy 很稳定,效率很好,而且跨平台。
wangxiangsjz
2005-11-07
打赏
举报
回复
http://www.loveunix.net/bbs/index.php?showtopic=22093
加载更多回复(9)
自己手
写
了一套高性能分布式IM
即时通讯
系统,出去面试嘎嘎聊,都把面试官整不会了!
分布式IM
即时通讯
系统本质上就是对线上聊天和用户的管理,针对聊天本身来说,最核心的需求就是:发送文字、图片、文件、语音、视频、消息缓存、消息存储、消息未读、已读、撤回,离线消息、历史消息、单聊、群聊,多端同步,以及其他一些需求。 对用户管理来说,存在的需求包含:添加好友、查看还有列表、删除好友、查看好友信息、创建群聊、加入群聊、查看群成员信息、退出群聊、修改群昵称、拉人进群、踢人出群、解散群聊、填
写
群公告、修改群备注以及其他用户相关的需求等。
Java实战案例:
即时通讯
系统开发详解
1.背景介绍 1. 背景介绍
即时通讯
系统是现代信息技术中的一个重要领域,它涉及到实时通信、数据传输、安全性等多个方面。随着互联网的发展,
即时通讯
系统的应用范围不断扩大,从传统的短信、电话到现代的即时消息、视频聊天等,都属于
即时通讯
系统的范畴。 Java语言在
即时通讯
系统开发中具有很大的优势,因为Java语言具有跨平台性、高性能和易于扩展等特点,可以很好地满足
即时通讯
系统的需求。在本文中,我...
小程序
即时通讯
聊天控件(一)
小程序
即时通讯
——文本、语音输入控件(一)集成近期一直在做微信小程序,业务上要求在小程序里实现
即时通讯
的功能。这部分功能需要用到文本和语音输入及一些语音相关的手势操作。所以我
写
了一个控件来处理这些操作。控件样式我们先来看下效果目前的功能就是动态图中展示的,我们可以使用这个控件来切换输入方式(文本或语音)、获取到输入的信息、取消语音输入、语音消息录制过短过长的判断(该接口暂时还未开放),支持发送图片和
基于python的安全
即时通讯
系统
Uchat是一款基于Python的安全
即时通讯
系统,具备注册登录、好友管理、
即时通讯
等核心功能。系统采用D-H密钥协商和AES对称加密保障通信安全,支持MD5消息摘要验证。服务器端实现用户状态维护、消息转发,数据库设计包含用户信息、好友关系、聊天记录等表。客户端提供聊天记录保存、未读消息提醒、字体样式修改等功能。系统支持群聊、离线消息处理,并限制单账号多处登录。具有模块化设计,确保可维护性和扩展性,运行环境要求Python3。
IM
即时通讯
-1-项目需求说明书
即时通讯
是现代交流的重要技术,它可以更方便快捷的进行群聊、聊天等功能,以便满足用户之间的沟通要求。
即时通讯
是一种基于网络的实时通信工具,它能够使各种跨设备的用户在网络中实现实时信息交换,形成紧密的讯息网络,实现系统即时通信。本项目基于这个背景,构建一个多设备
即时通讯
的轻量级软件,能够实现跨操作系统、跨设备实时交流,依靠移动设备的灵活性,系统可以实现用户间的便捷交流。
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章