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

上传人:b****6 文档编号:6157776 上传时间:2023-01-04 格式:DOCX 页数:48 大小:28.85KB
下载 相关 举报
局域网聊天软件源代码包括语音聊天.docx_第1页
第1页 / 共48页
局域网聊天软件源代码包括语音聊天.docx_第2页
第2页 / 共48页
局域网聊天软件源代码包括语音聊天.docx_第3页
第3页 / 共48页
局域网聊天软件源代码包括语音聊天.docx_第4页
第4页 / 共48页
局域网聊天软件源代码包括语音聊天.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

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

《局域网聊天软件源代码包括语音聊天.docx》由会员分享,可在线阅读,更多相关《局域网聊天软件源代码包括语音聊天.docx(48页珍藏版)》请在冰豆网上搜索。

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

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

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

//Chat.h:

PROJECT_NAME应用程序的主头文件

//

#pragmaonce

#ifndef__AFXWIN_H__

#error"在包含此文件之前包含“stdafx.h”以生成PCH文件"

#endif

#include"resource.h"//主符号

//CChatApp:

//有关此类的实现,请参阅Chat.cpp

//

classCChatApp:

publicCWinApp

{

public:

CChatApp();

//重写

public:

virtualBOOLInitInstance();

//实现

DECLARE_MESSAGE_MAP()

};

externCChatApptheApp;

//Chat.cpp:

定义应用程序的类行为。

//

#include"stdafx.h"

#include"Chat.h"

#include"ChatDlg.h"

//#ifdef_DEBUG

//#definenewDEBUG_NEW

//CChatApp

BEGIN_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:

头文件

#include"Public.h"

#include"Server.h"

#include"Client.h"

#ifndef_CChatDlg_h_//用于防止头文件嵌套多次1

#define_CChatDlg_h_//用于防止头文件嵌套多次2

#include"Sound.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,已经建立则为true

boolClientFlag;//用于表示是否已经连接了服务器,没有则为false,已经建立则为true

CServerServer;//用于服务器端的操作

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:

实现文件

#include"stdafx.h"

#include"ChatDlg.h"

//#include"Wmiutils.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)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

{

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

//设置此对话框的图标。

当应用程序主窗口不是对话框时,框架将自动

//执行此操作

SetIcon(m_hIcon,TRUE);//设置大图标

SetIcon(m_hIcon,FALSE);//设置小图标

//TODO:

在此添加额外的初始化代码

returnTRUE;//除非将焦点设置到控件,否则返回TRUE

}

voidCChatDlg:

:

OnSysCommand(UINTnID,LPARAMlParam)

{

if((nID&0xFFF0)==IDM_ABOUTBOX)

{

CAboutDlgdlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog:

:

OnSysCommand(nID,lParam);

}

}

//如果向对话框添加最小化按钮,则需要下面的代码

//来绘制该图标。

对于使用文档/视图模型的MFC应用程序,

//这将由框架自动完成。

voidCChatDlg:

:

OnPaint()

{

if(IsIconic())

{

CPaintDCdc(this);//用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND,reinterpret_cast(dc.GetSafeHdc()),0);

//使图标在工作区矩形中居中

intcxIcon=GetSystemMetrics(SM_CXICON);

intcyIcon=GetSystemMetrics(SM_CYICON);

CRectrect;

GetClientRect(&rect);

intx=(rect.Width()-cxIcon+1)/2;

inty=(rect.Height()-cyIcon+1)/2;

//绘制图标

dc.DrawIcon(x,y,m_hIcon);

}

else

{

CDialog:

:

OnPaint();

}

///////////////////程序员添加代码-开始////////////////////////

((CIPAddressCtrl*)GetDlgItem(IDI_IPADDRESS))->SetAddress(:

:

htonl(:

:

inet_addr("192.168.177.29")));

((CEdit*)this->GetDlgItem(IDE_PORT))->SetWindowTextA("7000");

((CButton*)this->GetDlgItem(IDB_SEND))->SetFocus();//将焦点设置为发送按钮

///////////////////程序员添加代码-结束////////////////////////

}

//当用户拖动最小化窗口时系统调用此函数取得光标

//显示。

HCURSORCChatDlg:

:

OnQueryDragIcon()

{

returnstatic_cast(m_hIcon);

}

voidCChatDlg:

:

OnBnClickedLinkserver()

{

Client.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_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;

}

voidCChatDlg:

:

OnBnClickedBuildserver()

{

//TODO:

在此添加控件通知处理程序代码

Server.InitM_dlg(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_hWnd,

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;

}

voidCChatDlg:

:

OnIpnFieldchangedIpaddress(NMHDR*pNMHDR,LRESULT*pResult)

{

LPNMIPADDRESSpIPAddr=reinterpret_cast(pNMHDR);

//TODO:

在此添加控件通知处理程序代码

*pResult=0;

}

voidCChatDlg:

:

OnBnClickedSend()

{

//TODO:

在此添加控件通知处理程序代码

(this->GetDlgItem(IDE_EDITCHAT))->GetWindowTextA(InPutCString);//把聊天输入窗口里面的文字保存到InPutCString中

if(InPutCString.GetLength()!

=0)

{

(this->GetDlgItem(IDE_EDITCHAT))->SetWindowTextA("");

if(Mark==SERVER)

{

AllCString=AllCString+"服务器:

"+InPutCString+"\r\n";

this->GetDlgItem(IDE_CHAT)->SetWindowText(AllCString);

Server.GetSendBuf(InPutCString);

Server.SendData(NULL);

}

elseif(Mark==CLIENT)

{

AllCString=AllCString+"客户端:

"+InPutCString+"\r\n";

this->GetDlgItem(IDE_CHAT)->SetWindowText(AllCString);

Client.GetSendBuf(InPutCString);

Client.SendData(NULL);

}

}

}

////////////////////////////用户定义消息响应函数-开始///////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////

//OnDataReach-开始//

//当有新数据到达时执行的代码//

////////////////

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

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

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