基于TCP的网络聊天室的设计.doc_第1页
基于TCP的网络聊天室的设计.doc_第2页
基于TCP的网络聊天室的设计.doc_第3页
基于TCP的网络聊天室的设计.doc_第4页
基于TCP的网络聊天室的设计.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于TCP的网络聊天室的设计【基于TCP的网络聊天室的设计】-实验指导 一、实验目的 1掌握通信规范的制定及实现。 2练习较复杂的网络编程,能够把协议设计思想应用到现实应用中。 1. 二、实验内容和要求 1进一步熟悉VC+6编程环境; 2利用VC+6进行较复杂的网络编程,完成网络聊天室的设计及编写; 三、实验(设计)仪器设备和材料 1计算机及操作系统:PC机,Windows; 2网络环境:可以访问互联网; 四、 TCP/IP程序设计基础 基于TCP/IP的通信基本上都是利用SOCKET套接字进行数据通讯,程序一般分为服务器端和用户端两部分。设计思路(VC6.0下): 第一部分服务器端 一、创建服务器套接字(create)。 二、服务器套接字进行信息绑定(bind),并开始监听连接(listen)。 三、接受来自用户端的连接请求(accept)。 四、开始数据传输(send/receive)。 五、关闭套接字(closesocket)。 第二部分客户端 一、创建客户套接字(create)。 二、与远程服务器进行连接(connect),如被接受则创建接收进程。 三、开始数据传输(send/receive)。 四、关闭套接字(closesocket)。 CSocket的编程步骤:(注意我们一定要在创建MFC程序第二步的时候选上Windows Socket选项,其中ServerSocket是服务器端用到的,ClientSocket是客户端用的。)? ()构造CSocket对象,如下例: CSocket ServerSocket;CSocket ClientSocket;()CSocket对象的Create函数用来创建Windows Socket,Create()函数会自行调用Bind()函数将此Socket绑定到指定的地址上面。如下例: ServerSocket.Create(823); /服务器端需要指定一个端口号,我们用823。 ClientSocket.Create(); /客户端不用指定端口号。 ()现在已经创建完基本的Socket对象了,现在我们来启动它,对于服务器端,我们需要这个Socket不停的监听是否有来自于网络上的连接请求,如下例: ServerSocket.Listen(5);/参数5是表示我们的待处理Socket队列中最多能有几个Socket。 ()对于客户端我们就要实行连接了,具体实现如下例: ClientSocket.Connect(CString SerAddress,Unsinged int SerPort);/其中SerAddress是服务器的IP地址,SerPort是端口号。 ()服务器是怎么来接受这份连接的呢?它会进一步调用Accept(ReceiveSocket)来接收它,而此时服务器端还须建立一个新的CSocket对象,用它来和客户端进行交流。如下例: CSocket ReceiveSocket;ServerSocket.Accept(ReceiveSocket);()如果想在两个程序之间接收或发送信息,MFC也提供了相应的函数。如下例: ServerSocket.Receive(String,Buffer); /String是你要发送的字符串,Buffer是发送字符串的缓冲区大小。ServerSocket.Send(String,Butter);/String是你要接收的字符串,Buffer是接收字符串的缓冲区大小。 框架实现: 客户端在MFC中创建对话框: void CClientDlg:OnButtonReceive() CString strAddr=202.112.73.150; unsigned int nPort=5050; if(!ChatReceive.Create() MessageBox(create failed,Receive,MB_ICONSTOP); return; else ChatReceive.Connect(strAddr,nPort); char sReceive1024; strAddr.Format(sReceive); ChatReceive.Receive(sReceive,1024,0); m_strEdit=sReceive; UpdateData(FALSE); ChatReceive.Close();? 服务器端创建对话框: void CServerDlg:OnButtonSend() / TODO: Add your control notification handler code here CString strSendText; unsigned int nPort=5050; GetDlgItemText(IDC_EDIT,strSendText); if(!ChatSend.Create(nPort) MessageBox(create failed); else ChatSend.Listen(); ChatSend.Accept(server); server.Send(strSendText,1000,0); server.Close(); ChatSend.Close();?五、 基于TCP的网络聊天室的设计要求:? (1)制定通信规范。 (2)设计界面如下: 1 服务器端 2 客户端 (3)设计思路: TCP/IP数据通信 - “聊天”消息传输格式 客户机 - 服务器 ()传输“用户名” STX+1+用户名+ETX() 悄悄话 STX+2+用户名+”,”+内容+ETX() 对所有人说 STX+3+内容+ETX? ?服务器- 客户机 ()首次传输在线用户名 STX+1+用户名+ETX()传输新到用户名 STX+2+用户名+ETX()传输离线用户名 STX+3+用户名+ETX()传输聊天数据 STX+4+内容+ETX(注:STX为CHR(2),ETX 为CHR(3) 服务器端 () 定义一个动态数组存储连接用户。定义一个全局变量存储连接用户的元素个数。 () 用一个使用UDP协议的SOCKET套接字完成发送服务器IP地址。 在该控件的数据接收事件中发送服务器IP地址 () 用一个使用TCP协议的SOCKET套接字数组完成TCP连接及数据发送和接收,处理它的连接请求事件。 ()SOCKET套接字的数据到达事件中首先接收数据到一个变量中,然后从这个变量中逐个提取消息,并对每个消息判断消息类型及做相应处理: case? 类型1? 传输“用户名” 修改用来存储连接用户的元素个数的数组 向所有在线用户发送该用户名消息 向该用户发送所有在线用户名的消息 case 类型2? 悄悄话 向源和目标用户发送消息 case 类型3? 对所有人说 向所有在线用户发送消息 () 服务器端的断开连接事件中 修改存储连接用户的元素个数的数组,卸载此控件,向所有在线用户发送消息离线。 客户端 () 添加一个SOCKET套接字,窗体加载时使用UDP协议,发广播数据报;等待接收到服务器主机地址后使用TCP协议完成连接及数据传送。 () 在客户端的数据到达事件中接受数据,如果客户端协议使用的是UDP协议,关闭客户端连接,重新设置客户端的协议、远程端口号、本地端口等参数,再调用连接方法请求连接,输入用户名,连接成功时发送用户名消息。否则,从接受的数据字符串中逐个提取消息,并对每个消息判断消息类型及做相应处理: case 类型1? 首次传输在线用户名 将用户名加入到用户列表中; case 类型2? 首次传输在线用户名 将用户名加入到用户列表中; 在聊天内容中添加该用户名加盟; case类型3? 传输离线用户名 从用户列表中删除该用户名 在聊天内容中添加该用户名退出; case类型4? 传输聊天数据 在聊天内容中添加聊天数据; () 在命令按纽触发事件中发送聊天内容 根据用户列表中的当前用户决定消息类型,并发送聊

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论