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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

计算机网络实验4.docx

1、计算机网络实验4东南大学自动化学院实 验 报 告课程名称: 计算机网络实验 实验名称: 实验四TCP/UDP 院 (系): 自动化 专 业: 自动化 姓 名: 杨淳元 学 号: 08012131 实 验 室: 机房 实验组别: 同组人员: 实验时间:2014 年 12 月 8日评定成绩: 审阅教师: 一、实验目的和要求:(一)基于TCP/IP的计算机网络通信应用程序设计1.通过本实验课程的学习,使学生能够理解TCP协议通信的基本原理。2.通过运用WinSock接口编写网络通信应用程序,掌握TCP网络应用程序架构的设计思想。3.学会设计利用TCP简单的应用层协议。(二)基于UDP/IP的计算机网

2、络通信应用程序设计1.通过本实验课程的学习,使学生能够理解UDP协议通信的基本原理。2.通过运用WinSock接口编写网络通信应用程序,掌握UDP网络应用程序架构的设计思想。3.学会设计利用UDP简单的应用层协议。二、实验原理:TCP(TransmissionControlProtocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗

3、?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用TCP协议传输数据。UDP(UserDataProtocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的

4、协议,它不与对方建立连接,而是直接就把数据包发送过去!UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包(如图2所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,

5、所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。TCP协议和UDP协议各有所长、各有所短,适用于不同要求的通信环境。TCP协议和UDP协议之间的差别如附表所示。三、实验方案与实验步骤:基于TCP的SOCKET编程:服务器端1:创建套接字(create)2:将套接字设为监听模式,准备接受客户请求(listen)3:等待客户请求到来;请求到来后,接受请求,返回一个新的对应于此次连接的套接字(accept)4:用返回的套接字和客户端进行通信(send/recv)5:关闭套接字客户端1:创建套接字(socket)2:向服务器发出连

6、接请求(connect)3:和服务器进行通信(send/recv)4:关闭套接字基于UDP的socket编程:服务器端1:创建套接字(create)2:将套接字绑定到一个本地地址和端口上(bind)3:等待接收数据(recvfrom)4:关闭套接字客户端1:创建套接字(create)2:向服务器发送数据(sendto)3:关闭套接字实验内容:在Windows网络环境下,以其中的2台计算机为对象,构成主从计算机应用系统,设计简单的应用层协议,开发基于TCP/IP或UDP/IP的网络通信程序,实现数据传送和文件传输。四、实验设备与器材配置:1实验室具有基于TCP/IP协议的Windows网络硬软件

7、环境;2微机1台。五、实验记录:TCP:void CProject2Dlg:OnSelchangeComboCs() / TODO: Add your control notification handler code here int set = m_cs_set.GetCurSel(); if(set=1) m_server=FALSE; this-GetDlgItem(IDC_SET_IPADDR)-EnableWindow(TRUE); m_set_ip=127.0.0.1; UpdateData(false); this-SetDlgItemText(IDC_CONNECT,连接);

8、 this-SetWindowText(TCP/IP通信客户端); else if(set=0) m_server=TRUE; m_set_ip= ; this-GetDlgItem(IDC_SET_IPADDR)-EnableWindow(FALSE); UpdateData(FALSE); this-SetDlgItemText(IDC_CONNECT,侦听); this-SetWindowText(TCP/IP通信服务器端); void CProject2Dlg:OnConnect() / TODO: Add your control notification handler code

9、here UpdateData(TRUE); int retb,ret,retc; SOCKADDR_IN addr; BOOL nret; CString ServerIP; ServerIP=m_set_ip; if(m_active=TRUE) return; if(m_server=TRUE) if( (m_set_port)4096) ) AfxMessageBox(请输入合理的端口号!); ret=m_listensocket.Create(m_set_port,SOCK_STREAM); if(ret = false) m_static_state= 无法建立服务器!; Upda

10、teData(FALSE); m_listensocket.Close(); retb=m_listensocket.Listen(5); if(retb=false) m_static_state= 无法侦听!; UpdateData(FALSE); m_static_state=服务器建立成功!正在侦听; m_list_msg.ResetContent(); m_list_msg.AddString(=服务器正在侦听); this-GetDlgItem(IDC_CONNECT)-EnableWindow(FALSE); this-GetDlgItem(IDC_COMBO_CS)-Enabl

11、eWindow(FALSE); UpdateData(FALSE); m_active=TRUE; else ServerIP.TrimLeft(); ServerIP.TrimRight(); if( inet_addr(ServerIP)= INADDR_NONE) AfxMessageBox(请输入正确的服务器IP地址!); if( (m_set_port)4096) ) AfxMessageBox(请输入合理的端口号!); retc=m_connectsocket.Create(0,SOCK_STREAM); if(retc = false) m_static_state= 无法建立客

12、户端!; UpdateData(FALSE); m_connectsocket.Close(); addr.sin_family=AF_INET; addr.sin_port=htons(m_set_port); addr.sin_addr.S_un.S_addr = inet_addr(m_set_ip); nret=m_connectsocket.Connect(SOCKADDR *)&addr,sizeof(SOCKADDR); if( nret=TRUE ) AfxMessageBox(连接服务器失败!); m_connectsocket.Close(); else m_static_

13、state= 正在连接服务器; this-GetDlgItem(IDC_CONNECT)-EnableWindow(FALSE); this-GetDlgItem(IDC_COMBO_CS)-EnableWindow(FALSE); UpdateData(FALSE); m_active=TRUE; void CProject2Dlg:OnServerAccept() if(m_active=TRUE) m_listensocket.Accept(m_connectsocket,NULL,NULL); m_static_state= 客户端已连接上; m_list_msg.AddString(

14、=客户端连接成功!); UpdateData(FALSE); CString welcome(Welcome my friend!); m_connectsocket.Send(welcome,welcome.GetLength(); void CProject2Dlg:OnClientConnect(int nErrorCode) sockaddr_in name; int len; CString buf; if(m_active=TRUE) if(nErrorCode!=0) m_list_msg.AddString(连接服务器错误!); m_static_state= 服务器连接错误;

15、 this-GetDlgItem(IDC_CONNECT)-EnableWindow(TRUE); this-GetDlgItem(IDC_COMBO_CS)-EnableWindow(TRUE); UpdateData(FALSE); m_active=FALSE; m_connectsocket.Close(); else len=sizeof(sockaddr_in); m_connectsocket.GetPeerName(SOCKADDR*)&name,&len); m_list_msg.ResetContent(); buf=成功连接上服务器; buf+=inet_ntoa(nam

16、e.sin_addr); m_list_msg.AddString(buf); m_static_state= 服务器连接成功!; UpdateData(FALSE); CString welcome(I am ); welcome+=CLIENT; m_connectsocket.Send(welcome,welcome.GetLength(); void CProject2Dlg:OnServerClose() m_connectsocket.Close(); m_static_state= 正在侦听; m_list_msg.ResetContent(); m_list_msg.AddSt

17、ring(=客户端已退出); m_list_msg.AddString(=服务器正在侦听); UpdateData(FALSE); void CProject2Dlg:OnSocketClose() if(m_active=FALSE) return; if(m_server=TRUE) OnServerClose(); else OnClientClose(); void CProject2Dlg:OnClientClose() m_connectsocket.Close(); m_list_msg.ResetContent(); m_list_msg.AddString(服务器已断开。成功

18、退出); m_static_state= 已断开连接; this-GetDlgItem(IDC_CONNECT)-EnableWindow(TRUE); this-GetDlgItem(IDC_COMBO_CS)-EnableWindow(TRUE); UpdateData(FALSE); m_active=FALSE;void CProject2Dlg:OnSocketReceive() if(m_server=TRUE) OnServerReceive(); else OnClientReceive(); void CProject2Dlg:OnServerReceive() BOOL A

19、ct=FALSE; CString nRev,nret; char bufMAX_BUFFER+1; int ret,i,len; ret=m_connectsocket.Receive(buf,MAX_BUFFER,0); if(ret!=SOCKET_ERROR) bufret=NULL; nRev=buf; nret+=CLIENT; nret+=:; len=nret.GetLength(); nret=nRev.Right( ( (nRev.GetLength()-len ) ); if(nret.GetAt(0)=/) Act=DoAction(nret); if(Act=FALS

20、E) m_list_msg.AddString(LPCTSTR)nRev); i=m_list_msg.GetCount(); m_list_msg.SetCurSel(i-1); m_list_msg.SetCurSel(-1); UpdateData(FALSE); else AfxMessageBox(消息接收错误!);void CProject2Dlg:OnClientReceive() char bufMAX_BUFFER+1; BOOL Act=FALSE; int ret,i,len; CString nRev,nret; ret=m_connectsocket.Receive(

21、buf,MAX_BUFFER,0); if(ret!=SOCKET_ERROR) bufret=NULL; nRev=buf; nret+=SERVER; nret+=:; len=nret.GetLength(); nret=nRev.Right( ( (nRev.GetLength()-len ) ); if(nret.GetAt(0)=/) Act=DoAction(nret); if(Act=FALSE) m_list_msg.AddString(LPCTSTR)nRev); i=m_list_msg.GetCount(); m_list_msg.SetCurSel(i-1); m_l

22、ist_msg.SetCurSel(-1); UpdateData(FALSE); else AfxMessageBox(消息接收错误!);void CProject2Dlg:OnSendMsg() / TODO: Add your control notification handler code here CString buf; int nret; BOOL Act=FALSE; int nLen,i; UpdateData(TRUE); m_outmsg.TrimLeft(); if(m_outmsg.IsEmpty() AfxMessageBox(对不起,不能发送空消息!); ret

23、urn; if(m_server=TRUE) buf+=SERVER; buf+=:; else buf+=CLIENT; buf+=:; buf+=m_outmsg; nLen=buf.GetLength(); nret = m_connectsocket.Send(LPCTSTR)buf,nLen); if(nret!=SOCKET_ERROR) if(m_outmsg.GetAt(0)=/) Act=DoAction(m_outmsg); if(Act=FALSE) m_list_msg.AddString(LPCTSTR)buf); m_outmsg.Empty(); i=m_list

24、_msg.GetCount(); m_list_msg.SetCurSel(i-1); m_list_msg.SetCurSel(-1); UpdateData(FALSE); else AfxMessageBox(消息发送失败! :();BOOL CProject2Dlg:DoAction(CString act)/* CPaintDC dc(this); CRect rect; GetClientRect(&rect); rect.DeflateRect(50, 50); CDC * pDC=GetDC(); CPen pen(PS_SOLID,3,RGB(255,0,0); pDC-Se

25、lectObject(&pen); pDC-Rectangle(10,10,10,10);*/ switch(act.GetAt(1) case m:ShellExecute(NULL,NULL,老人与海.mp3,wmplayer.exe,NULL,SW_SHOWMAXIMIZED ); return TRUE; case q:AfxMessageBox(Quit);return TRUE; case l:AfxMessageBox(Laugh*_* :-);return TRUE; case c: AfxMessageBox(Circle OoOoOo); return TRUE; case

26、 r: /AfxMessageBox(Rectangle ); ShellExecute(NULL,explore,C:/windows/media,NULL,NULL,SW_SHOWNORMAL); return TRUE; case n:DrawNiu();return TRUE; case p:DrawPhone();return TRUE; default: return FALSE; void CProject2Dlg:DrawNiu() for(int i=0;iTP_niu_int;i+) m_list_msg.AddString(TP_niu_stri); void CProj

27、ect2Dlg:DrawPhone() for(int i=0;iTP_phone_int;i+) m_list_msg.AddString(TP_phone_stri); UDP:void CUDPprojectDlg:OnConnect() / TODO: Add your control notification handler code here UpdateData(TRUE); CString strconnect; m_connect.GetWindowText(strconnect); if(strconnect=开始聊天) BOOL nret; HANDLE Thread; SOCKADDR_IN addr; addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addr.sin_family=AF_INET; addr.sin_port=htons(m_port); nret=udpSocket.Create(m_port,SOCK_DGRAM); m_111=nret; if(nret=FALSE) AfxMessageBox(建立服务器失败!); /建立监听线程 Thread = CreateThread(NULL,0,

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

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