局域网聊天软件源代码包括语音聊天//Chat.h:PROJECT_NAME应用程序的主头文件//#pragmaonce#ifndef__AFXWIN_H__#error在包含此文件之前包含“stdafx.h”以生成PCH文件#endif#includeresource.h//主符号//CChatApp://有关此类的实现,请参阅Chat.cpp//classCChatApp:publicCWinApp{public:CChatApp();//重写public:virtualBOOLInitInstance();//实现DECLARE_MESSAGE_MAP()};externCChatApptheApp;//Chat.cpp:定义应用程序的类行为。//#includestdafx.h#includeChat.h#includeChatDlg.h//#ifdef_DEBUG//#definenewDEBUG_NEW//CChatAppBEGIN_MESSAGE_MAP(CChatApp,CWinApp)ON_COMMAND(ID_HELP,&CWinApp::OnHelp)END_MESSAGE_MAP()//CChatApp构造CChatApp::CChatApp(){//TODO:在此处添加构造代码,//将所有重要的初始化放置在InitInstance中}//唯一的一个CChatApp对象CChatApptheApp;//CChatApp初始化BOOLCChatApp::InitInstance(){//如果一个运行在WindowsXP上的应用程序清单指定要//使用ComCtl32.dll版本6或更高版本来启用可视化方式,//则需要InitCommonControlsEx()。否则,将无法创建窗口。INITCOMMONCONTROLSEXInitCtrls;InitCtrls.dwSize=sizeof(InitCtrls);//将它设置为包括所有要在应用程序中使用的//公共控件类。InitCtrls.dwICC=ICC_WIN95_CLASSES;InitCommonControlsEx(&InitCtrls);CWinApp::InitInstance();AfxEnableControlContainer();//标准初始化//如果未使用这些功能并希望减小//最终可执行文件的大小,则应移除下列//不需要的特定初始化例程//更改用于存储设置的注册表项//TODO:应适当修改该字符串,//例如修改为公司或组织名SetRegistryKey(_T(应用程序向导生成的本地应用程序));CChatDlgdlg;m_pMainWnd=&dlg;INT_PTRnResponse=dlg.DoModal();if(nResponse==IDOK){//TODO:在此放置处理何时用//“确定”来关闭对话框的代码}elseif(nResponse==IDCANCEL){//TODO:在此放置处理何时用//“取消”来关闭对话框的代码}//由于对话框已关闭,所以将返回FALSE以便退出应用程序,//而不是启动应用程序的消息泵。returnFALSE;}//#endif//ChatDlg.h:头文件#includePublic.h#includeServer.h#includeClient.h#ifndef_CChatDlg_h_//用于防止头文件嵌套多次1#define_CChatDlg_h_//用于防止头文件嵌套多次2#includeSound.h#pragmaonce#defineWM_DATAREACHWM_APP+110#defineCLIENT1#defineSERVER2//CChatDlg对话框classCChatDlg:publicCDialog{//构造public:CChatDlg(CWnd*pParent=NULL);//标准构造函数//对话框数据enum{IDD=IDD_CHAT_DIALOG};protected:virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持//实现protected:HICONm_hIcon;//生成的消息映射函数virtualBOOLOnInitDialog();afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();DECLARE_MESSAGE_MAP()//afx_msgvoidOnBnClickedButton3();////////////自定义数据/////////////////public:boolServerFlag;//用于表示是否已经建立了服务器,没有则为false,已经建立则为trueboolClientFlag;//用于表示是否已经连接了服务器,没有则为false,已经建立则为trueCServerServer;//用于服务器端的操作CClientClient;//用于服务端的操作CSoundSound;//用于音频操作CStringInPutCString;//用于保存输入窗口的文字数据CStringAllCString;//用于保存所有聊天记录的文字数据intMark;//用于标识是客户端还是服务器boolSoundChat;//用于标识是否已经开始语音聊天,false表示没有,true表示已经建立语音聊天了WAVEHDR*p;////////////////////自定义消息响应函数-开始/////////////////////LRESULTOnDataReach(WPARAMwParam,LPARAMlParam);//当有新数据到达时执行的代码afx_msgLRESULTGetInBufferFull(WPARAMwp,LPARAMlp);//一个buffer满后调用afx_msgLRESULTWriteOutBufferEmpty(WPARAMwp,LPARAMlp);//一个buffer播放完后调用////////////////////自定义消息响应函数-结束/////////////////////////////////////////////////////////////afx_msgvoidOnBnClickedLinkserver();afx_msgvoidOnBnClickedBuildserver();afx_msgvoidOnIpnFieldchangedIpaddress(NMHDR*pNMHDR,LRESULT*pResult);afx_msgvoidOnBnClickedSend();afx_msgvoidOnEnChangeChat();afx_msgvoidOnBnClickedClose();afx_msgvoidOnBnClickedVoicechat();};#endif//用于防止头文件嵌套多次3//ChatDlg.cpp:实现文件#includestdafx.h#includeChatDlg.h//#includeWmiutils.h#ifdef_DEBUG#definenewDEBUG_NEW#endif//用于应用程序“关于”菜单项的CAboutDlg对话框classCAboutDlg:publicCDialog{public:CAboutDlg();//对话框数据enum{IDD=IDD_ABOUTBOX};protected:virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持//实现protected:DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD){}voidCAboutDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)END_MESSAGE_MAP()//CChatDlg对话框CChatDlg::CChatDlg(CWnd*pParent/*=NULL*/):CDialog(CChatDlg::IDD,pParent){ServerFlag=false;//初始化还没有建立服务器ClientFlag=false;Mark=0;AllCString=;SoundChat=false;p=(WAVEHDR*)malloc(sizeof(WAVEHDR)+MAX_BUFFER_SIZE);m_hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME);}voidCChatDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CChatDlg,CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAP//ON_BN_CLICKED(IDC_BUTTON3,&CChatDlg::OnBnClickedButton3)ON_BN_CLICKED(IDB_LINKSERVER,&CChatDlg::OnBnClickedLinkserver)ON_BN_CLICKED(IDB_BUILDSERVER,&CChatDlg::OnBnClickedBuildserver)ON_NOTIFY(IPN_FIELDCHANGED,IDI_IPADDRESS,&CChatDlg::OnIpnFieldchangedIpaddress)//ON_WM_CREATE()ON_BN_CLICKED(IDB_SEND,&CChatDlg::OnBnClickedSend)////////////////////用户自定义的消息-开始///////////////////////ON_MESSAGE(WM_DATAREACH,OnDataReach)ON_MESSAGE(MM_WIM_DATA,GetInBufferFull)//一个buffer满了后调用ON_MESSAGE(MM_WOM_DONE,WriteOutBufferEmpty)//buffer的内容被播放完了后,产生的消息调用这个函数////////////////////用户自定义的消息-结束/////////////////////////ON_EN_CHANGE(IDE_EDITCHAT,&CChatDlg::OnEnChangeEditchat)//ON_EN_MAXTEXT(IDE_EDITCHAT,&CChatDlg::OnEnMaxtextEditchat)//ON_EN_CHANGE(IDE_EDITCHAT,&CChatDlg::OnEnChangeEditchat)ON_EN_CHANGE(IDE_CHAT,&CChatDlg::OnEnChangeChat)ON_BN_CLICKED(IDB_CLOSE,&CChatDlg::OnBnClickedClose)ON_BN_CLICKED(IDB_VOICECHAT,&CChatDlg::OnBnClickedVoicechat)END_MESSAGE_MAP()//CChatDlg消息处理程序BOOLCChatDlg::OnInitDialog(){CDialog::OnInitDialog();//将“关于...”菜单项添加到系统菜单中。//IDM_ABOUTBOX必须在系统命令范围内。ASSERT((IDM_ABOUTBOX&0xFFF0)