ImageVerifierCode 换一换
格式:DOCX , 页数:48 ,大小:28.85KB ,
资源ID:6157776      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6157776.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(局域网聊天软件源代码包括语音聊天.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

局域网聊天软件源代码包括语音聊天.docx

1、局域网聊天软件源代码包括语音聊天局域网聊天软件源代码包括语音聊天 / Chat.h : PROJECT_NAME 应用程序的主头文件/#pragma once#ifndef _AFXWIN_H_ #error 在包含此文件之前包含“stdafx.h”以生成 PCH 文件#endif#include resource.h / 主符号/ CChatApp:/ 有关此类的实现,请参阅 Chat.cpp/class CChatApp : public CWinApppublic: CChatApp();/ 重写 public: virtual BOOL InitInstance();/ 实现 DECL

2、ARE_MESSAGE_MAP();extern CChatApp theApp; / Chat.cpp : 定义应用程序的类行为。/#include stdafx.h#include Chat.h#include ChatDlg.h/#ifdef _DEBUG/#define new DEBUG_NEW / CChatAppBEGIN_MESSAGE_MAP(CChatApp, CWinApp) ON_COMMAND(ID_HELP, &CWinApp:OnHelp)END_MESSAGE_MAP()/ CChatApp 构造CChatApp:CChatApp() / TODO: 在此处添加

3、构造代码, / 将所有重要的初始化放置在 InitInstance 中/ 唯一的一个 CChatApp 对象CChatApp theApp;/ CChatApp 初始化BOOL CChatApp:InitInstance() / 如果一个运行在 Windows XP 上的应用程序清单指定要 / 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, /则需要 InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); / 将它设置

4、为包括所有要在应用程序中使用的 / 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp:InitInstance(); AfxEnableControlContainer(); / 标准初始化 / 如果未使用这些功能并希望减小 / 最终可执行文件的大小,则应移除下列 / 不需要的特定初始化例程 / 更改用于存储设置的注册表项 / TODO: 应适当修改该字符串, / 例如修改为公司或组织名 SetRegistryKey(_T(应用程序向导生成的本地应用程序); CChatDl

5、g dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse = IDOK) / TODO: 在此放置处理何时用 / “确定”来关闭对话框的代码 else if (nResponse = IDCANCEL) / TODO: 在此放置处理何时用 / “取消”来关闭对话框的代码 / 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, / 而不是启动应用程序的消息泵。 return FALSE;/#endif / ChatDlg.h : 头文件#includePublic.h #includeServe

6、r.h#includeClient.h#ifndef _CChatDlg_h_/用于防止头文件嵌套多次1#define _CChatDlg_h_/用于防止头文件嵌套多次2#includeSound.h#pragma once #define WM_DATAREACH WM_APP+110#define CLIENT 1#define SERVER 2/ CChatDlg 对话框class CChatDlg : public CDialog/ 构造public: CChatDlg(CWnd* pParent = NULL); / 标准构造函数/ 对话框数据 enum IDD = IDD_CHAT

7、_DIALOG ; protected: virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持/ 实现protected: HICON m_hIcon; / 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP()/ afx_msg void

8、OnBnClickedButton3();/自定义数据/public: bool ServerFlag;/用于表示是否已经建立了服务器,没有则为false,已经建立则为true bool ClientFlag;/用于表示是否已经连接了服务器,没有则为false,已经建立则为true CServer Server;/用于服务器端的操作 CClient Client;/用于服务端的操作 CSound Sound;/用于音频操作 CString InPutCString;/用于保存输入窗口的文字数据 CString AllCString;/用于保存所有聊天记录的文字数据 int Mark;/用于标识

9、是客户端还是服务器 bool SoundChat;/用于标识是否已经开始语音聊天,false表示没有,true表示已经建立语音聊天了 WAVEHDR *p;/自定义消息响应函数-开始/ LRESULT OnDataReach(WPARAM wParam, LPARAM lParam);/当有新数据到达时执行的代码 afx_msg LRESULT GetInBufferFull(WPARAM wp, LPARAM lp);/一个buffer满后调用 afx_msg LRESULT WriteOutBufferEmpty(WPARAM wp, LPARAM lp);/一个buffer播放完后调用/

10、自定义消息响应函数-结束/ afx_msg void OnBnClickedLinkserver(); afx_msg void OnBnClickedBuildserver(); afx_msg void OnIpnFieldchangedIpaddress(NMHDR *pNMHDR, LRESULT *pResult); afx_msg void OnBnClickedSend(); afx_msg void OnEnChangeChat(); afx_msg void OnBnClickedClose(); afx_msg void OnBnClickedVoicechat();#en

11、dif/用于防止头文件嵌套多次3 / ChatDlg.cpp : 实现文件#include stdafx.h#include ChatDlg.h/#includeWmiutils.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogpublic: CAboutDlg();/ 对话框数据 enum IDD = IDD_ABOUTBOX ; protected: virtual void DoDataExchange(CDataExchange*

12、 pDX); / DDX/DDV 支持/ 实现protected: DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()/ CChatDlg 对话框 CChatDlg:CChatDlg(CWnd* pParent /*=NULL*/) : CDialo

13、g(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);void CChatDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX);BEGIN_MESSAG

14、E_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_FIELDCHANG

15、ED, 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的内容被播放完了后,产生的消息调用这个函数/用户

16、自定义的消息-结束/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_

17、VOICECHAT, &CChatDlg:OnBnClickedVoicechat)END_MESSAGE_MAP()/ CChatDlg 消息处理程序BOOL CChatDlg:OnInitDialog() CDialog:OnInitDialog(); / 将“关于.”菜单项添加到系统菜单中。 / IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING,

18、 IDM_ABOUTBOX, strAboutMenu); / 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 / 执行此操作 SetIcon(m_hIcon, TRUE); / 设置大图标 SetIcon(m_hIcon, FALSE); / 设置小图标 / TODO: 在此添加额外的初始化代码 return TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoid CChatDlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX) CAboutDlg dlgAbout; dl

19、gAbout.DoModal(); else CDialog:OnSysCommand(nID, lParam); / 如果向对话框添加最小化按钮,则需要下面的代码/ 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,/ 这将由框架自动完成。void CChatDlg:OnPaint() if (IsIconic() CPaintDC dc(this); / 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0); / 使图标在工作区矩形中居中 int cxIcon = GetSyst

20、emMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; / 绘制图标 dc.DrawIcon(x, y, m_hIcon); else CDialog:OnPaint(); /程序员添加代码-开始/ (CIPAddressCtrl *)GetDlgItem(IDI_IPADDRESS)-Set

21、Address(:htonl(:inet_addr(192.168.177.29); (CEdit *)this-GetDlgItem(IDE_PORT)-SetWindowTextA(7000); (CButton *)this-GetDlgItem(IDB_SEND)-SetFocus();/将焦点设置为发送按钮 /程序员添加代码-结束/当用户拖动最小化窗口时系统调用此函数取得光标/显示。HCURSOR CChatDlg:OnQueryDragIcon() return static_cast(m_hIcon);void CChatDlg:OnBnClickedLinkserver() C

22、lient.InitM_dlg(this); / TODO: 在此添加控件通知处理程序代码 if(ClientFlag=false) Client.GetServerAddress(); if(Client.AddSocketLib()&Client.CreateSocket()&Client.ConnectSocket() ClientFlag=true; this-GetDlgItem(IDE_LINKSTATE)-SetWindowText(服务器连接成功); Mark=CLIENT; :WSAAsyncSelect(Client.ClientSocket,this-m_hWnd, WM

23、_DATAREACH,FD_OOB|FD_READ|FD_WRITE|FD_ACCEPT|FD_CLOSE|FD_CONNECT); :WSAAsyncSelect(Client.ClientSocketSound,this-m_hWnd, WM_DATAREACH,FD_OOB|FD_READ|FD_WRITE|FD_ACCEPT|FD_CLOSE|FD_CONNECT); return ; return ; else return ;void CChatDlg:OnBnClickedBuildserver() / TODO: 在此添加控件通知处理程序代码 Server.InitM_dlg(

24、this); if(ServerFlag=false) Server.GetServerAddress(); if(Server.AddSocketLib()& Server.CreateSocket()& Server.BindSocket()& Server.ListeSocket()& Server.AcceptClient() ServerFlag=true; this-GetDlgItem(IDE_BUILDSTATE)-SetWindowText(服务器设置成功); Mark=SERVER; :WSAAsyncSelect(Server.ConnectSocket,this-m_h

25、Wnd, WM_DATAREACH,FD_OOB|FD_READ|FD_WRITE|FD_ACCEPT|FD_CLOSE|FD_CONNECT); :WSAAsyncSelect(Server.ConnectSocketSound,this-m_hWnd, WM_DATAREACH,FD_OOB|FD_READ|FD_WRITE|FD_ACCEPT|FD_CLOSE|FD_CONNECT); return ; return ; else return ;void CChatDlg:OnIpnFieldchangedIpaddress(NMHDR *pNMHDR, LRESULT *pResul

26、t) LPNMIPADDRESS pIPAddr = reinterpret_cast(pNMHDR); / TODO: 在此添加控件通知处理程序代码 *pResult = 0;void CChatDlg:OnBnClickedSend() / TODO: 在此添加控件通知处理程序代码 (this-GetDlgItem(IDE_EDITCHAT)-GetWindowTextA(InPutCString);/把聊天输入窗口里面的文字保存到InPutCString中 if(InPutCString.GetLength()!=0) (this-GetDlgItem(IDE_EDITCHAT)-Set

27、WindowTextA(); if(Mark=SERVER) AllCString=AllCString+ 服务器:+InPutCString+rn; this-GetDlgItem(IDE_CHAT)-SetWindowText(AllCString); Server.GetSendBuf(InPutCString); Server.SendData(NULL); else if(Mark=CLIENT) AllCString=AllCString+ 客户端:+InPutCString+rn; this-GetDlgItem(IDE_CHAT)-SetWindowText(AllCString); Client.GetSendBuf(InPutCString); Client.SendData(NULL); /用户定义消息响应函数-开始/ OnDataReach-开始 / 当有新数据到达时执行的代码 /

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1