前些天用mfc写了个聊天类小程序,本来不想贴出来的,看论坛里一个人分享的android SOCKET聊天类,便也有和大家分享的冲动,哈哈,不喜勿喷哦。
首先谈一下构想:
服务器(主机)挂起accept();使用TCP/IP协议
数据库在主机上,因为不懂客户机如何访问主机数据库。因此测试时在我的机子上用两个IP(127.0.0.1,无线连接192.168.1.xxx)实现。
服务器或客户机连接对方后便可对话,使用UDP协议。不说主机和客户机对数据库相关的查询了。
谈一谈现成的相关的吧:
由于现实在线好友列表的模块需要实时性,所以对在线好友的显示新建一个线程:
sockudp *addstring=new sockudp;
addstring->hwnd=m_hWnd;
HANDLE handle= CreateThread(NULL,0,add,LPVOID(addstring),0,NULL);
CloseHandle(handle);
add()便是不停对在线情况进行查询了(虽然效率不高,但也想不出别的办法了)
while(1)
{
.....
.....
if(LB_ERR ==m_listfriend.FindString(0,string)&&condition.m_online==1)
m_listfriend.AddString(string);
if((index=m_listfriend.FindString(0,string))!=LB_ERR&&condition.m_online==0)
m_listfriend.DeleteString(index);
}
另外接收信息时recv()会阻塞,好吧,再建一个线程。
sockudp *x=new sockudp;
x->hwnd=m_hWnd;
x->socket=sockSrv;
HANDLE handle=CreateThread(NULL,0,recvUDP,LPVOID(x),0,NULL);
CloseHandle(handle);
最后上图:
Server:
Client:
WINDOWS的UI要想做好的话可得花些心思,不像adroid那么容易copy过来。