欢迎来到天天文库
浏览记录
ID:9302520
大小:82.00 KB
页数:5页
时间:2018-04-27
《vc实现简单聊天工具实践》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、显然大家都用过QQ等聊天工具,也或许有想弄明白其中的工作原理,学过编程的朋友或许还会希望自己也能设计出一款差不多的程序软件。在这里我根据孙鑫老师讲的VC教程,整理出来了一个程序,不敢说我对这方面弄得很明白,只是将我实现这个软件的过程向有需要的朋友介绍下,如果恰好能给予方便,自是倍感安慰,权当闲暇之余的消遣罢了。闲话就不多说了,下面详细介绍其实现过程,有不完善之处,请有心人及时反映给我,共同进步,谢谢!(实现语言:VC++)步骤:(一)打开VC++6.0,创建一个MFCAppWizard(exe),工程名为:CHART,选择但文档类型,在应用程序向导第六步将基类改为“CVi
2、ew”,单击“完成”,创建完成。(二)在其生成的对话框IDD_CHART_FORM中添加控件:控件名称控件ID控件标题组框IDC_STATIC接收信息:组框IDC_STATIC发送信息:编辑框IDC_EDIT_RECEIVE编辑框IDC_EDIT_SENDIP地址IDC_IPADDRESS1静态文本ID:按钮IDC_BTN_SEND发送(三)在CCHARTView中添加成员变量:SOCKETm_socket;(四)在CHARTView.h添加结构体:structRECEIVE{SOCKETsock;HWNDhwnd;};(五)在CCHARTView中添加成员函数:BOOL
3、InitSocket();函数代码:BOOLCCHARTView::InitSocket(){m_socket=socket(AF_INET,SOCK_DGRAM,0);//创建一个能够进行网络通信的套接字if(INVALID_SOCKET==m_socket){MessageBox("套接字创建失败!");returnFALSE;}SOCKADDR_INAddrSock;AddrSock.sin_family=AF_INET;//指代协议族,在socket编程中只能是AF_INET,代表TCP/IP协议族。AddrSock.sin_port=htons(6000);//
4、存储端口号(使用网络字节顺序)AddrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//sin_addr存储IP地址,s_addr按照网络字节顺序存储IP地址intretwal;retwal=bind(m_socket,(SOCKADDR*)&AddrSock,sizeof(SOCKADDR));//将套接字绑定到IP和端口上if(SOCKET_ERROR==retwal){closesocket(m_socket);MessageBox("绑定失败!");returnFALSE;}returnTRUE;}(一)添加成员函数:DW
5、ORDWINAPIRecvPrac(LPVOIDlpParaneter);//作为一个线程函数代码:DWORDWINAPICCHARTView::RecvPrac(LPVOIDlpParaneter){SOCKETsock=((RECEIVE*)lpParaneter)->sock;HWNDhwnd=((RECEIVE*)lpParaneter)->hwnd;SOCKADDR_INaddrFrom;intlen=sizeof(SOCKADDR);charrecvBuf[200];chartempBuf[300];intretval;while(TRUE){retval=r
6、ecvfrom(sock,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len);/*recvfrom()函数各参数意义:1是标识一个已连接套接口的描述字,2是接收数据缓冲区,3是缓冲区长度,4是调用操作方式,5(可选)是指向装有原地址的缓冲区,6(可选)指向from缓冲区长度值*/if(SOCKET_ERROR==retval)break;CTimetm;tm=CTime::GetCurrentTime();CStringtime;time=tm.Format("【%H:%M:%S】");sprintf(tempBuf,"%st%s说:r
7、nt%sr",inet_ntoa(addrFrom.sin_addr),time,recvBuf);::PostMessage(hwnd,WH_RECVPATA,0,(LPARAM)tempBuf);}return0;}(一)在CHARTView.h添加:#defineWH_RECVPATAWM_USER+1//定义自己的消息ID(大于WM_USER的ID为用户ID,小于WM_USER的ID为系统调用ID)(二)在CHARTView.h中AFX_MSG后声明消息处理函数:(添加)afx_msgvoidOnRecvDat
此文档下载收益归作者所有