社区
网络编程
帖子详情
类似QQ的多对话框聊天
long12310225
2010-12-24 02:04:23
csocket或CAsyncSocket建立的聊天软件,如何像QQ那样,点击列表产生任意个对话框,然后可以随意聊天?一般网上的是一对一的聊天的实例,没见到一对多的像QQ那样的,请高手告诉我如何实现?如果有实例的话可以发去我邮箱:375102274@qq.com 。
...全文
323
9
打赏
收藏
类似QQ的多对话框聊天
csocket或CAsyncSocket建立的聊天软件,如何像QQ那样,点击列表产生任意个对话框,然后可以随意聊天?一般网上的是一对一的聊天的实例,没见到一对多的像QQ那样的,请高手告诉我如何实现?如果有实例的话可以发去我邮箱:375102274@qq.com 。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
KaKaKaKa
2011-01-05
打赏
举报
回复
mark++
superhanxin5
2010-12-25
打赏
举报
回复
mark x
awain
2010-12-25
打赏
举报
回复
那楼主的程序应该设置成这样
在主程序窗口:有个监听SOCKET Socket用于监听会话请求,同时有SOCKET AcceptSocket[20]用于接受请求并会话。来一个会话请求,就从20个AcceptSocket中选个空的AcceptSocket与之连接弹出聊天窗口,并设置该Socket的WM_SOCKET_READ消息的处理窗口句柄。
同时还有个SOCKET SendSocket用于发送请求,连接成功后同样设置消息。这样楼主就同时可以和21个人进行会话了。
下面是我曾经做的一个类似QQ的点对点聊天程序,测试通过的,多用户多窗口聊天。希望对楼主有所帮助
afx_msg LRESULT CSimpleQDlg::OnServerAccept(WPARAM wParam, LPARAM lParam)
{
int nLength = sizeof(SOCKADDR);
SOCKADDR_IN addr;
int i;
if (WSAGETSELECTEVENT(lParam) == FD_ACCEPT)
{
for(i=0;(i<20)&&(m_hAcceptSocket[i]!=INVALID_SOCKET);i++) ;//查找空闲AcceptSocket
if(i==20) return 0; //没有空闲AcceptSocket,直接退出
m_hAcceptSocket[i] = accept(m_hServerSocket, (LPSOCKADDR)&addr, (LPINT)&nLength);
//连接成功后首先发生自己的昵称
int iSize = WideCharToMultiByte(CP_ACP,0,m_staticName,-1,NULL,0,NULL,NULL);
char *na = new char[iSize];
WideCharToMultiByte(CP_ACP,0,m_staticName,-1,na,iSize,NULL,NULL);//转化CString类型的IP为char *
send(m_hAcceptSocket[i],na,strlen(na),0);
CSimpleQWordChat *sqwc=new CSimpleQWordChat();
sqwc->SetNickName(m_staticName);
sqwc->SetPeerIP(CString(inet_ntoa(addr.sin_addr)));
sqwc->Create(IDD_DIALOG_WORDCHAT,GetDesktopWindow());
//这一句必须放在Create之后,因为此时窗体句柄m_hWnd才会分配空间
sqwc->SetSocket(m_hAcceptSocket[i]);
sqwc->ShowWindow(SW_SHOW);
sqwc->UpdateData(false);
}
return 0;
}
void CSimpleQWordChat::SetSocket(SOCKET& socket)
{
m_hSocket=socket;
//自定义消息
WSAAsyncSelect(m_hSocket,this->m_hWnd,WM_SOCKET_READ,FD_READ);
}
要自己处理添加消息处理函数:ON_MESSAGE(WM_SOCKET_READ, &CSimpleQWordChat::OnSocketRead)
这样某个Socket有数据到来后后就会向指定的窗口m_hWnd发送消息WM_SOCKET_READ,FD_READ是消息通知码。各个窗口间不干扰!
Jurang
2010-12-24
打赏
举报
回复
一对多的聊天,采用的是UDP广播消息。
VR_Lab
2010-12-24
打赏
举报
回复
其实就是相当与加入一个组中,让后通关这个组中有多少个成员然后将信息都发送过去即可(针对没有服务器模式的,就像飞鸽那种的)
zjfhgdx
2010-12-24
打赏
举报
回复
一般网上的是一对一的聊天的实例只有一个socket连接。
一对多,多连几个socket不就可以了
Eleven
2010-12-24
打赏
举报
回复
聊天室程序,google一下应该很多的
oyljerry
2010-12-24
打赏
举报
回复
需要从服务器上获取其他好友的IP等信息,然后socket通信
varding
2010-12-24
打赏
举报
回复
飞鸽和qq很像还有源码的
QT实现两界面
类似
QQ
聊天
题目要求:在基于QT的界面基础上,两个窗口通过套接字实现网络通信,所用协议包括TCP和UDP协议,为了模拟不同的计算机,请大家建立两个虚拟机,一个虚拟机运行一个
类似
QQ
的界面,两个界面实现
类似
QQ
聊天
。 1.什么是TCP和UDP协议,他么各有什么特点和优缺点? TCP(传输控制协议)提供的是面向连接,可靠的字节流服务。即客户和服务器交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。并且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 UDP(用户数据报协议)
QTabWidget 实现
类似
QQ
聊天
窗口
新版本的
QQ
聊天
窗口可以实现拖动,分离出新的窗口。浏览器等软件也可以实现
类似
操作。所以心血来潮想用Qt实现
类似
的功能。想用QTabWidget直接实现是很难的,仔细阅读源码,发现QTabWidget内部是由QStackedWidget和QTabBar组合实现的。所以很自然的想到,只要继承QTabBar的子类重新实现QTabBar的void mousePressEvent (QMouseEvent
用TableView实现
聊天
对话框
用tableView可实现如
QQ
,飞信,微信等
聊天
软件的
对话框
效果。 要实现如图功能要解决以下几个问题: 1.
对话框
的高度能随着文本的多少动态变化,如果字数少于一行能存放的最大字数还要调整
对话框
的宽度,如果
对话框
的文字太少要保证
对话框
至少要与头像照片一样高 2.
对话框
是一个button,要完成
对话框
的背景的拉伸,使之与文字适合,点击
对话框
有高亮显示 3.要在toolbar中加入
一个
QQ
隐蔽
聊天
的软件,用于你在办公室
QQ
聊天
又不想让其他人知道
这个程序是我以前还不是很忙的时候随便搞的一个。主要参考了Enumeration源代码,用于查找句柄。由于
QQ
里的RichEdit并不是一般的RichEdit,不可以直接发送消息给它,所以废了一些周折。不过后来找到了解决问题的折中方法:利用模拟键盘将要发送的消息进行复制粘贴,然后再发送出去。 form1上的控件包含一个commonDialog:cdlbg用于打开文件的通用
对话框
,一个t
VC++开发
类似
QQ
的
聊天
程序完整教程
本文还有配套的精品资源,点击获取 简介:本文详细介绍如何利用VC++开发一个
类似
QQ
的
聊天
应用程序。我们将深入探讨MFC库的使用、网络编程、多线程技术、数据序列化、消息队列、数据库存储、安全性措施、UI设计、错误处理以及性能优化等多个关键领域。这些知识点对于深入理解客户端开发和网络通信至关重要,是学习VC++程序员的宝贵资料。 1. MFC库使用与
QQ
聊天
界面构建...
网络编程
18,356
社区成员
64,161
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章