winsock网络变成Word格式.docx
- 文档编号:22387104
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:19
- 大小:169.55KB
winsock网络变成Word格式.docx
《winsock网络变成Word格式.docx》由会员分享,可在线阅读,更多相关《winsock网络变成Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
2.总体设计
2.1功能要求
✧支持多个客户端的连接,在服务器和多个客户端之间进行数据传输;
✧接收客户端发送的消息,并显示在一个列表框中;
✧在用户连接上后有提示,显示出连接的用户名字;
✧发送信息时可以显示聊天的所有记录;
2.3系统主要功能和主要功能描述:
服务器端聊天程序必须能够做3件事情:
(1)服务器聊天程序要在待定的端口上等待来自聊天客户的连接请求,并且需要维护一个客户连接表,以记录所有成功的连接。
(2)服务器聊天程序要及时接受从各个聊天客户发送过来的信息,然后把这些信息转发到一个或多个客户连接。
对于公共聊天室,服务器将把接受到的信息向除源端外的所有客户发送过去。
(3)服务器还要监控这些连接的状态,在客户主动离开或发生故障时从列表中删除相应的表项,并及时更新连接表。
客户端聊天程序需要完成以下几个功能:
(1)客户端聊天程序要负责建立和维护与服务器的连接,通过获取用户的设置尝试与服务器的连接,并且随时检测连接的状态。
(2)客户端聊天程序要把用户输入的信息及时发送到聊天服务器。
一般情况下,当用户输入一行信息并且按下回车键后聊天程序就要把这一行信息发送出去,才能及时地满足用户的交互需求。
(3)要随时准备好接受来自服务器的信息,随时把接受到的信息显示出来,让用户及时看到对方的响应。
(4)在用户退出聊天过程是要关闭与服务器的连接。
比较好的做法是提前通知服务器或者直接给服务器发送一条退出通知,使得服务器能够及时掌握客户端的连接状态,把对方客户的退出信息及时发送到对等实体上。
客户端聊天程序需要使用一个通过CSocket类派生出来的CChatSocket类来实现。
该套接字用来发送一个与服务器的连接请求和维持与服务器的连接,发送和接收聊天信息,完成上述各项功能。
3.详细设计
3.1设计流程图
3.2客户端的实现
(1)首先启动VisualC++6.0,利用MFCAppWizard[EXE]建立一个新的MFC工程,工程名为tcpclient,在MFCAppWizardStep1的时候选择Dialogbased即基于对话框,在Step4时勾选WindowsSockets选项(如图3.11),其他默认值下一步。
图3.11MFC的设置
(2)客户端主要分为三个窗口,第一个是连接窗口,需要输入连接到服务器的相关设置信息;
第二个是聊天信息显示窗口,该窗口显示登录服务器以来发送和接收到的消息;
第三个是消息编辑发送窗口,需要输入你要发送的信息内容并发送。
新建一个对话框,并添加各种控件(见控件表3.1)如下图:
图3.12聊天窗口布局
表3.1控件类型及各自ID
标题
控件类型
控件ID
服务器IP:
Static
IDC_STATIC
文本框1:
Edit
IDC_EDIT1
服务器端口号:
文本框2:
IDC_EDIT2
昵称:
文本框3:
IDC_EDIT3
登录:
Button
IDC_connect
信息区:
发送:
IDC_send
文本框4
IDC_EDIT4
其中文本框1:
服务器IP;
文本框2:
端口号;
昵称;
文本框4:
发送的消息
(3)服务器IP编辑框控件IDC_EDIT1对应的成员变量为OnChangeEdit1
端口号编辑框控件IDC_EDIT2对应的成员变量为OnChangeEdit2
昵称编辑框控件IDC_EDIT3对应的成员变量为OnChangeEdit3
消息编辑区编辑框控件IDC_EDIT4对应的成员变量为OnChangeEdit4
(4)下面重点介绍一下单击连接服务器按钮时的处理网络连接的函数。
代码设置如下:
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.3服务端的实现
(1)和客户端一样,仍然建立一个基于对话框的工程,工程名为tcpserver,同样,注意一定不要忘记在Step4时勾选WindowsSockets选项。
其他默认下一步。
(2)客户端主要分为三个窗口,第一个是服务器信息设置窗口,需要输入服务器的相关设置信息;
第二个是聊天信息显示窗口,该窗口显示启动服务器以来发送和接收到的消息;
新建一个对话框,并添加各种控件(见控件表3.2)如下图:
图3.21
表3.2控件类型及各自ID
服务器信息设置
服务器IP地址:
服务器端口:
设置:
IDC_set
取消:
IDC_cancel
文本框1
文本框2
其中,编辑框1:
服务器的IP地址;
编辑框2:
服务器端口号
(3)服务器IP地址编辑框控件IDC_EDIT1对应的成员变量为OnChangeEdit1
端口号编辑框控件IDC_EDIT2对应的成员变量为OnChangeEdit2
(4)下面重点介绍一下单击设置服务器按钮时的处理网络连接的函数。
voidCTcpseverDlg:
Onlisten()
//Beep(2000,100);
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(端口号)。
图3.22图3.23
④设置建立连接后相应提示。
(5)要显示服务器接收到来自客户端其他用户的信息,代码设置如下:
onrev(intmynum)
inti;
charss[100];
100;
csrev[mynum].Receive(ss,100);
str.Format("
for(i=1;
i<
=csnum;
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->
(6)当有新用户进入时,显示“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);
(7)在退出程序时的提示,如下图:
图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.心得体会:
通过本课题的设计,可以比较深入的了解和掌握WINSOCK控件基本属性、方法和事件,理解网络聊天通信的概念,输控制协议(TCP)进行数据交流,初步掌握网络聊天通信程序的设计方法。
并能巩固和扩展大学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求。
5.参考文献
1、钟军.《VB网络高级编程》.北京:
人邮出版,1998
2、汪晓平.《VC++6.0开发网络典型应用实例导航》.北京:
人邮出版社,2006
3、刘海英.《VC++6.0网络通信编程实用案例精选》.北京:
4、AnthonyJones.《windows网络编程》.北京:
清华大学出版社,2002
总结:
优秀:
课程设计期间不迟到不早退。
做了充足的准备工作,与专业相关知识能紧密联系。
系统功能非常全面,完全达到设计要求。
课程设计报告条理清晰,书写规范,图文并茂,报告内容全面,主要内容阐述详细。
认识体会深刻,很好地达到了课程设计的目的。
良好:
为设计工作做了充足的准备工作,与专业相关知识能较紧密联系。
系统功能较全面,达到设计要求。
课程设计报告条理清晰,书写规范,图文并茂,报告内容较全面,主要内容阐述较详细。
认识体会较深刻,较好地达到了课程设计的目的。
中等:
课程设计期间偶尔会迟到和早退。
设计工作准备基本充足,与专业相关知识能基本能联系。
系统功能达到设计要求。
课程设计报告条理清晰,书写较规范,报告内容较全面,能用部分图片展示相关内容,主要内容阐述较详细。
认识体会较好,达到了课程设计的目的。
及格:
课程设计期间偶尔会早退和迟到。
设计工作准备不够充足,与专业相关知识基本能联系。
系统功能基本达到设计要求。
课程设计报告条理基本清晰,书写基本规范,报告内容基本全面,主要内容阐述基本详细。
认识体会不太深刻,基本达到课程设计的目的。
不及格:
课程设计期间经常迟到早退。
设计工作准备不够充足,与专业相关知识不能紧密联系。
课程设计报告条理不清晰,书写不规范,报告内容不全面,主要内容阐述不详细。
认识体会不深刻,未能达到课程设计的目的。
课程设计综合成绩评定:
教师评阅:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- winsock 网络 变成
![提示](https://static.bdocx.com/images/bang_tan.gif)