类似QQ的多对话框聊天

long12310225 2010-12-24 02:04:23
csocket或CAsyncSocket建立的聊天软件,如何像QQ那样,点击列表产生任意个对话框,然后可以随意聊天?一般网上的是一对一的聊天的实例,没见到一对多的像QQ那样的,请高手告诉我如何实现?如果有实例的话可以发去我邮箱:375102274@qq.com 。
...全文
295 9 打赏 收藏 转发到动态 举报
写回复
用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很像还有源码的

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧