C++网络聊天室设计和源程序Word格式.docx

上传人:b****3 文档编号:16790272 上传时间:2022-11-26 格式:DOCX 页数:13 大小:166.19KB
下载 相关 举报
C++网络聊天室设计和源程序Word格式.docx_第1页
第1页 / 共13页
C++网络聊天室设计和源程序Word格式.docx_第2页
第2页 / 共13页
C++网络聊天室设计和源程序Word格式.docx_第3页
第3页 / 共13页
C++网络聊天室设计和源程序Word格式.docx_第4页
第4页 / 共13页
C++网络聊天室设计和源程序Word格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

C++网络聊天室设计和源程序Word格式.docx

《C++网络聊天室设计和源程序Word格式.docx》由会员分享,可在线阅读,更多相关《C++网络聊天室设计和源程序Word格式.docx(13页珍藏版)》请在冰豆网上搜索。

C++网络聊天室设计和源程序Word格式.docx

因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。

2.2MFC类CAsyncsocket和CSocket

构造一个CAsyncSocket对象并使用该对象创建基础SOCKET句柄。

套接字的创建遵循两阶段构造的MFC模式。

例如:

CAsyncSocketsock;

sock.Create();

//Usethedefaultparameters

对于服务器套接字,必须指定端口。

对于客户端套接字,通常接受此参数的默认值,该值允许WindowsSockets选择端口。

套接字类型:

SOCK_STREAM(默认值)或SOCK_DGRAM。

套接字“地址”,如“”或“128.56.22.8”。

该地址为网络上的网际协议(IP)地址。

很可能要始终依赖此参数的默认值。

如果套接字是客户端,则使用CAsyncSocket:

:

Connect将此套接字对象连接到服务器套接字。

销毁CAsyncSocket对象。

如果在堆栈上创建了套接字对象,当包含函数超出范围时将调用此对象的析构函数。

如果使用new运算符在堆上创建了套接字对象,则必须负责使用delete运算符销毁此对象。

“阻塞”方案。

发送和接收计算机之间的字节顺序差异。

在Unicode和多字节字符集(MBCS)字符串之间转换。

2.3利用CSocket进行有连接的通信

CAsyncSocket类逐个封装了WinSockAPI,为高级网络程序员提供了更加有力而灵活的方法。

这个类基于程序员了解网络通讯的假设,目的是为了在MFC中使用WinSock,程序员有责任处理诸如阻塞、字节顺序和在Unicode与MBCS间转换字符的任务。

为了提供更方便的接口以自动处理这些任务,MFC给出了CSocket类,这个类是由CAsyncSocket类继承下来的,它提供了比CAsyncSocket更高层的WinSockAPI接口。

Csocket类和CsocketFile类可以与Carchive类一起合作来管理发送和接收的数据,这使管理数据收发更加便利。

CSocket对象提供阻塞模式,这对于Carchive的同步操作是至关重要的。

阻塞函数(如Receive()、Send()、ReceiveFrom()、SendTo()和Accept())直到操作完成后才返回控制权。

3.1客户端的实现

(1)首先启动VisualC++6.0,利用MFCAppWizard[EXE]建立一个新的MFC工程,工程名为tcpclient,在MFCAppWizardStep1的时候选择Dialogbased即基于对话框,在Step4时勾选WindowsSockets选项(如图3.11),其他默认值下一步。

图3.11MFC的设置

(2)客户端主要分为三个窗口,第一个是连接窗口,需要输入连接到服务器的相关设置信息;

第二个是聊天信息显示窗口,该窗口显示登录服务器以来发送和接收到的消息;

第三个是消息编辑发送窗口,需要输入你要发送的信息内容并发送。

(单击连接服务器按钮时的处理网络连接的函数。

代码设置如下:

voidCTcpclientDlg:

Onconnet()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

if(clconect)clconect.Close();

CStringipstr,portstr;

intport;

GetDlgItemText(IDC_EDIT1,ipstr);

GetDlgItemText(IDC_EDIT2,portstr);

GetDlgItemText(IDC_EDIT5,clientname);

portstr.TrimLeft();

portstr.TrimRight();

port=atoi(portstr);

if(port>

0&

&

port<

9999){

clconect.Create();

//cslisten.Bind(port);

if(clconect.Connect(ipstr,port))

{

clconect.setp(this);

CWnd*cw=GetDlgItem(IDC_EDIT1);

cw->

EnableWindow(false);

cw=GetDlgItem(IDC_EDIT2);

cw=GetDlgItem(IDC_connet);

cw=GetDlgItem(IDC_EDIT5);

SetDlgItemText(IDC_EDIT3,"

已设名字"

+clientname+"

\r\n连接服务器成功"

);

CStringenterinfo=clientname+"

进入聊天室"

;

intlen=enterinfo.GetLength();

clconect.Send(enterinfo,len);

}

else{

clconect.Close();

MessageBox("

连接失败,请检查IP与端口是否与服务器一致!

或者服务器没打开"

"

连接错误"

MB_ICONERROR);

}

else{

MessageBox("

端口或IP输入有误,请重新输入"

}

设计步骤:

①创建字符串ipstr(保存IP),portstr(保存端口),clientname(用户名),整型port(端口号)。

②利用GetDlgItemText将各个编辑框中的信息赋给相应的变量。

③监视端口号和IP格式并设置相应错误提示(如下图)。

图3.13连接错误提示

图3.14端口或IP错误提示

④创建套接字clconect,设置成功创建后相关控件为只读。

⑤设置建立连接后相应提示。

(5)接下来就是对话框中的发送(回车)按钮的函数,代码设置如下:

Onsend()

CStringstr;

GetDlgItemText(IDC_EDIT4,str);

str=clientname+"

"

+str;

intlen=str.GetLength();

if(clconect.Send(str,len)>

1)SetDlgItemText(IDC_EDIT4,"

定义字符串str用于保存输入的消息,调整格式后使用CSocket的操作函数send将消息发送到服务器。

(6)要显示客户端接收到来自服务器其他用户的信息,代码设置如下:

onrev()

CStringstr,str1;

charss[256];

for(intj=0;

j<

256;

j++)ss[j]='

\0'

clconect.Receive(ss,256);

if(ss!

="

str.Format("

%s"

ss);

GetDlgItemText(IDC_EDIT3,str1);

str=str1+"

\r\n"

SetDlgItemText(IDC_EDIT3,str);

CEdit*ce=((CEdit*)GetDlgItem(IDC_EDIT3));

ce->

LineScroll(ce->

GetLineCount()-1);

①创建字符串str、str1,字符数组ss。

②接受来自服务器套接字的信息数据保存到ss中,调整格式后将其打印到消息区。

(7)当与服务器断开连接时弹出警告,如下图:

图3.15失去连接提示

oncl()

MessageBox("

失去连接或者找不到服务器"

CWnd*cw=GetDlgItem(IDC_EDIT1);

cw->

EnableWindow(true);

cw=GetDlgItem(IDC_EDIT2);

cw=GetDlgItem(IDC_connet);

cw=GetDlgItem(IDC_EDIT5);

当失去与服务器的连接后,重新将连接服务器设置编辑框启用等待下次连接。

(8)在退出程序时的提示,如下图:

图3.16退出确认

OnClose()

intconfirm=MessageBox("

确定退出吗"

请确定"

MB_YESNO|MB_ICONQUESTION);

if(confirm==IDYES){

CStringenterinfo=clientname+"

退出了聊天室"

intlen=enterinfo.GetLength();

clconect.Send(enterinfo,len);

CDialog:

OnClose();

①当退出程序时,弹出确认对话框。

②当选择“是”时,将用户退出信息发送至服务器并关闭对话框。

至此客户端的核心部分介绍完毕。

3.2服务端的实现

(1)和客户端一样,仍然建立一个基于对话框的工程,工程名为tcpserver,同样,注意一定不要忘记在Step4时勾选WindowsSockets选项。

其他默认下一步。

(2)客户端主要分为三个窗口,第一个是服务器信息设置窗口,需要输入服务器的相关设置信息;

第二个是聊天信息显示窗口,该窗口显示启动服务器以来发送和接收到的消息;

新建一个对话框,并添加各种控件(见控件表3.2)如下图:

单击启动服务器按钮时的处理网络连接的函数。

voidCTcpseverDlg:

Onlisten()

//Beep(2000,100);

intport;

GetDlgItemText(IDC_EDIT3,ipstr);

severname=ipstr;

GetDlgItemText(IDC_EDIT4,portstr);

if(cslisten.Create(port)){

//cslisten.Bind(port);

cslisten.Listen();

cslisten.setp(this,csnum);

CWnd*cw=GetDlgItem(IDC_EDIT3);

cw=GetDlgItem(IDC_EDIT4);

cw=GetDlgItem(IDC_listen);

cw=GetDlgItem(IDC_EDIT1);

SetWindowText("

服务器名:

+severname+"

\r\n等待用户连接,监听端口:

+portstr+"

..."

设置监听端口失败,端口可能被其它程序占用"

cslisten.Close();

端口输入有误,请重新输入"

}

①创建字符串ipstr(保存IP),portstr(保存端口),整型port(端口号)。

③监视端口号和IP格式并设置相应错误提示

④设置建立连接后相应提示。

CStringstr,history;

GetDlgItemText(IDC_EDIT1,history);

GetDlgItemText(IDC_EDIT2,str);

str=severname+"

intsended;

for(inti=1;

i<

=csnum;

i++)if(csrev[i])

if(sended=csrev[i].Send(str,len)){

SetDlgItemText(IDC_EDIT2,"

SetDlgItemText(IDC_EDIT1,history+"

+str);

CEdit*ce=((CEdit*)GetDlgItem(IDC_EDIT1));

ce->

定义字符串str用于保存输入的消息,调整格式后使用CSocket的操作函数send将消息发送到各个客户端。

(6)要显示服务器接收到来自客户端其他用户的信息,代码设置如下:

onrev(intmynum)

inti;

charss[100];

100;

csrev[mynum].Receive(ss,100);

str.Format("

for(i=1;

i++)if(csrev[i])

if(csrev[i])csrev[i].Send(str,100);

GetDlgItemText(IDC_EDIT1,str1);

str=str1+"

SetDlgItemText(IDC_EDIT1,str);

CEdit*ce=((CEdit*)GetDlgItem(IDC_EDIT1));

ce->

(7)当有新用户进入时,显示“XXX进入”。

代码如下:

onac()

CStringstr1,str;

GetDlgItemText(IDC_EDIT1,str1);

CStringstr2="

\r\n进入"

str=str1+str2;

SetDlgItemText(IDC_EDIT1,str);

cslisten.Accept(csrev[++csnum]);

csrev[csnum].setp(this,csnum);

图3.24退出确认

CStringstr="

服务器即将退出"

intconfirm=MessageBox("

确定退出服务器?

所有用户都将断开"

intlen=str.GetLength();

for(inti=1;

i++)if(csrev[i])csrev[i].Send(str,len);

str=severname+"

退出,与服务器连接已断开"

len=str.GetLength();

for(i=1;

②当选择“是”时,将服务器关闭信息发送至各个客户端并关闭对话框。

.程序运行结果

4.1服务器端

图4.4.2客户端

图4.2

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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