


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2016年12月2016年12月20日(一)基于TCP/IP的计算机网络通信应用程序设计东南大学自动化学院实验报告课程名称:信息通信网络概论第4次实验实验名称:实验四、计算机网络通信应用程序设计自动化实 验 原理3三 实 验 方 案与 实 验 步骤 3四^ 实 验 设 备与 器 材 配置4五.实验记录 4六.实验总结 11附录:部分代码二)基于UDP/IP的计算机网络通信应用程序设计一.实验目的和要TOC\o"1-5"\h\z求 17二.实验原理 17三.实验方案与实验步骤 17四.实验设备与器材配置 18五.实验记录 六.实验总七.思考题或讨论题 25附录:部分代码(一)基于TCP/IP的计算机网络通信应用程序设计一.实验目的和要求通过本实验课程的学习,使学生能够理解TCP协议通信的基本原理。通过运用WinSock接口编写网络通信应用程序,掌握TCP网络应用程序架构的设计思想。学会设计利用TCF简单的应用层协议。二.实验原理TCP是面向连接的通信协议,TCP提供两台计算机之间的可靠无错的数据传输。应用程序利用TCP进行通信时,源和目标之间会建立一个虚拟连接。这个连接一但建立,两台计算机之间就可以把数据当作一个双向字节流进行交换。三.实验方案与实验步骤1、 客户机/服务器工作流程服务器端1:创建套接字并将套接字绑定到一个本地地址和端口上(create)。2:将套接字设为监听模式,准备接受客户请求(listen)。3:等待客户请求到来;请求到来后,接受请求,返回一个新的对应于此次连接的套接字(accept)。4:用返回的套接字和客户端进行通信(send/receive)。5:返回,等待另一客户请求。6:关闭套接字。客户端2:向服务器发出连接请求(connect)。3:和服务器进行通信(send/receive)。4:关闭套接字。图3.1客户机/服务器工作流程2、 系统实现图3.2系统实现过程四.实验设备与器材配置电脑、VC6.0五.实验记录1、界面选择:客户机、服务器;输入:IP设置、端口设置、输入内容;(3)输出显示:消息列表、发送和接收消息数目;(4)按钮:连接/侦听、发送、清空、退出。图5.1界面设计2、功能描述(1)初始化:服务器点击侦听,客户机输入服务器IP后,点击连接实现服务器——客户机之间的连接通信。在界面上显示连接信息,服务器向客户机发送Welcomemyfriend!,客户机向服务器发送IamPau。图5.2初始化(2)客户机与服务器对话:服务器显示Server:+发送的消息,客户机显示Paul:+发送的信息。图5.3客户机与服务器对话输入/n在聊天对话框画一个牛,输入/p画一个电话图5.4输入/p画一个电话图5.5输入/n画一个电话输入/l会弹出一个对话框图5.6输入/l弹出一个对话框输入/r会打开一个windows资源管理器,并打开指定的路径,当前设置的路径为:C:/windows/media图5.7输入/r打开一个windows资源管理器3、 改进1)获取发送方主机名和发送时间通过函数gethostname(hostname,sizeof(hostname))通过函数time()、localtime()获得当前系统时间,能够显示发送接收时间,格式为年/月/日时/分/秒,添加到接收信息列表中信息首部。图5.8获取主机名、添加发送时间自定义字符画:定义字符串TP_xin_str,输入/x时调用绘制一个小象图5.9自定义字符画自定义表情符号:输入/s时输出"难过(〒—〒)",输入/a时输出"生气(▼皿▼#)",输入/j时输出"惊讶(OoO)"等。图5.10自定义表情符号4)显示发送、接收消息总数通过m_list.GetCount()函数实现对列表中发送和接收到的信息计数,并显示在界面上。初始化时,发送数和接收数均为1,清空列表后,相应的重置为0。5)清空列表通过函数m_list.ResetContent()实现清空列表。添加背景图片、改变控件背景色、字体等。上传bmp图片到Bitmap资源文件夹中,在OnPaint()中添加代码,通过不同图片的ID来设置不同的背景图片。通过加入WM_CTLCOLOR息,自动生成OnCtlColor()函数,利用SetBkMode()、SetTextColor()、SetBkColor()、CreateSolidBrush()、SetFont()等函数设置背景格式、改变控件背景色和字体大小颜色等。图5.10其他功能六.实验总结这次实验与实验三较为相似,在上次的基础上,增加了自定义字符画、符号表情等,进一步加深了对TCP/IP协议的理解,也能够根据生活中的聊天工具如QC等,增加一些类似的功能,使其应用性更强。附录:(部分代码)1、获取对方主机信息添加发送接收时间(客户端和服务器类似,在此只贴出服务器代码)voidCProject2Dlg::OnServerReceive(){CStringmDay;CStringmTime;CStringttime;time_tt1;t1=time(NULL);//机器时间structtm*p;p=localtime(&t1);//转换为本地时间mDay.Format("%4d/%2d/%2d",1900+p->tm_year,1+p->tm_mon,p->tm_mday);mTime.Format("%3d:%2d:%2d",p->tm_hour,p->tm_min,p->tm_sec);BOOLAct=FALSE;CStringnRev,nret,nRet;charbuf[MAX_BUFFER+1];intret,i,len;charhostname[100];ret=m_connectsocket.Receive(buf,MAX_BUFFER,0);if(ret!=SOCKET_ERROR){gethostname(hostname,sizeof(hostname));//获取对方主机名m_receive+=1;〃接收消息数加1buf[ret]=NULL;nRev=buf;nRet+=mDay+mTime+""+hostname+"";//添加发送时间和主机名nret+=CLIENT;nret+=":";len=nret.GetLength();nret=nRev.Right(((nRev.GetLength())-len));if(nret.GetAt(0)=='/')m_list_msg.AddString(nRet);Act=DoAction(nret);}if(Act==FALSE){nRet+=nRev;m_list_msg.AddString(nRet);}i=m_list_msg.GetCount();m_list_msg.SetCurSel(i-1);m_list_msg.SetCurSel(-1);UpdateData(FALSE);}elseAfxMessageBox(消息接收错误!");}2、 显示发送、接收消息总数voidCProject2Dlg::OnSendMsg(){//TODO:AddyourcontrolnotificationhandlercodehereCStringbuf;intnret;BOOLAct=FALSE;intnLen,i;UpdateData(TRUE);m_outmsg.TrimLeft();if(m_outmsg.IsEmpty()){AfxMessageBox(对不起,不能发送空消息!");return;}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){m_send+=1;//发送消息数加1if(m_outmsg.GetAt(0)=='/'){Act=DoAction(m_outmsg);}if(Act==FALSE){m_list_msg.AddString((LPCTSTR)buf);}m_outmsg.Empty();i=m_list_msg.GetCount();m_list_msg.SetCurSel(i-1);m_list_msg.SetCurSel(-1);UpdateData(FALSE);}elseAfxMessageBox(消息发送失败!:(");}3、 清空列表voidCProject2Dlg::OnRemoveall()//TODO:Addyourcontrolnotificationhandlercodeherem」ist_msg.ResetContent();//青空列表m_receive=O;〃重置接收消息数m_send=0;〃重置发送消息数UpdateData(FALSE);}4、 自定义字符画voidCProject2Dlg::DrawXin(){CStringTP_xin_str[7]={H/\\~~~/\\",, (..)"/\\~~~/\\",, (..)"\\____/"(\\|(",/___\\ /\\|",H"/"/|"八\\" |__| |__|-“"};intTP_xin_int=7;for(inti=0;i<TP_xin_int;i++)m_list_msg.AddString(TP_xin_str[i]);5、 自定义表情符号switch(act.GetAt(1)){case'm':ShellExecute(NULL,NULl老人与海.mp3","wmplayer.exe",NULL,SW_SHOWMAXIMIZED);returnTRUE;case'q':AfxMessageBox("Quit");returnTRUE;caseT:AfxMessageBox(开心(杯w八*)");returnTRUE;case's':AfxMessageBox难过(〒一〒)");returnTRUE;case'a':AfxMessageBox(生气(▼皿▼#)");returnTRUE;case'j':AfxMessageBox(惊讶(OoO门;returnTRUE;case'c':AfxMessageBox("CircleOoOoOo");returnTRUE;case'r'://AfxMessageBox("Rectangle");ShellExecute(NULL,"explore","C:/windows/media",NULL,NULL,SW_SHOWNORMAL);returnTRUE;case'n':DrawNiu();returnTRUE;case'p':DrawPhone();returnTRUE;case'x':DrawXin();returnTRUE;default:returnFALSE;}6、 添加背景图片voidCProject2Dlg::OnPaint()if(IsIconic()){CPaintDCdc(this);//devicecontextforpaintingSendMessage(WM_ICONERASEBKGN(DW,PARAM)dc.GetSafeHdc(),0);//CentericoninclientrectangleintcxIcon=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);//Drawtheicon}else{//CDialog::OnPaint();CPaintDCdc(this);CRectrect;GetClientRect(&rect);CDCdcMem;dcMem.CreateCompatibleDC(&dc);CBitmapbmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP1);//IDB_BITMAP是图对应的IDBITMAPbitmap;bmpBackground.GetBitmap(&bitmap);CBitmap*pbmpOld=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);}}7、 改变背景色、字体大小颜色等HBRUSHCProject2Dlg::OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor){HBRUSHhbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor);//TODO:ChangeanyattributesoftheDChere//设置显示字体CFont*cFont=newCFont;cFont->CreateFont(16,0,0,0,FW_SEMIBOLD,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH&FF_SWISS,"Arial");if(pWnd==this)//改变整个界面背景色{HBRUSHbrush=CreateSolidBrush(RGB(199,237,204));return(HBRUSH)brush;}switch(nCtlColor){caseCTLCOLOR_STATICt所有静态文本控件的设置{pDC->SetBkMode(TRANSPARENT)设置背景为透明pDC->SetTextColor(RGB(255,255,0));设置字体颜色pWnd->SetFont(cFont);//设置字体HBRUSHB=CreateSolidBrush(RGB(199,237,204)创建画刷return(HBRUSH)B;/返/回画刷句柄}break;default:returnCDialog::OnCtlColor(pDC,pWnd,nCtlColor);}//TODO:Returnadifferentbrushifthedefaultisnotdesiredreturnhbr;(二)基于UDP/IP的计算机网络通信应用程序设计一、 实验目的和要求通过本实验课程的学习,使学生能够理解UD协议通信的基本原理。通过运用WinSock接口编写网络通信应用程序,掌握UD网络应用程序架构的设计思想。学会设计利用UD简单的应用层协议。二、 实验原理UDP是无连接通信协议,UDF不保证可靠数据的传输,但能够向若干个目标发送数据,接收发自若干个源的数据。简单地说,如果一个主机向另外一台主机发送数据,这一数据就会立即发出,而不管另外一台主机是否已准备接收数据。如果另外一台主机收到了数据,它不会确认收到与否。三、 实验方案与实验步骤服务器端创建套接字并将套接字绑定到一个本地地址和端口上(create);等待接收数据(ReceiveFrom);关闭套接字。客户端创建套接字(create);向服务器发送数据(sendto);关闭套接字。四、 实验设备与器材配置电脑、VC6.0五、 实验记录1、 界面(1) 输入:IF设置、端口设置、输入内容;(2) 输出显示:消息列表;(3) 按钮:发送、清空列表、导出消息记录、退出。图5.1界面设计2、 功能描述初始化:客户机输入服务器IP后,点击开始聊天。(a)客户端初始化(b)服务器初始化图5.2初始化客户机与服务器对话:此时服务器并没有填写客户机的 IP地址,能够接收到客户机发送的消息,并且获得发送方IP。(a)客户机端界面(b)服务器端界面图5.3客户机与服务器对话客户机端界面服务器端界面图5.3客户机与服务器对话(3)输入/n在聊天对话框画一个牛,输入/p画一个电话图5.4字符画(4)输入/r会打开一个windows资源管理器,并打开指定的路径,当前设置的路径为:C:/windows/media图5.7输入/r打开一个windows资源管理器3、 改进添加发送时间通过函数time()、localtime()获得当前系统时间,能够显示发送接收时间,格式为年/月/日时/分/秒,添加到接收信息列表中信息首部清空列表通过函数m_list.ResetContent()实现清空列表。导出消息记录通过函数m_list_msg.GetText()把列表中的信息写入字符串中,再利用文件读写函数fopen()、fwrite()、fclose()将字符串写入指定文件中。图5.8导出消息记录到txt中输入/e打开指定网址,输入/t打开指定图片图5.9输入指定字符执行相应的操作添加背景图片、改变控件背景色、字体等。方法与实验(一)中相同,不再赘述。图5.10其他功能六、 实验总结在原有程序的基础上,增加了保存消息记录、自定义协议等功能,同时修改了界面,但是对于MFC中按钮的界面设置仍然不太了解,尝试直接在WM_CTLCOLO息自动生成OnCtlColor()函数中进行设置,没有达到预期效果,希望在以后的学习过程中能够学到并解决这个问题。通过这次实验,我对TCP协议和UDP协议各自的特点有了一定理解,能够判断在不同场合下应使用哪个协议,掌握并理解了它们的区别和各自的优缺点。七、 思考题或讨论题1、结合所学知识与实验中的感受,说明TCP协议和UDP协议各自的优缺点。在工业控制的现场中,要通过网络控制一台焊接机器人的运行,要求控制数据能正确传输。试分析说明,采用哪种运输层协议比较好?另外,网络中使用的IP电话服务采用的是哪种运输层协议?为什么要采用这种协议?并说明理由。TCP协议和UDP协议各自的优缺点:TCP有连接,所以握手过程会消耗资源,过程为可靠连接,不会丢失数据,适合大数据量交换;UDP非可靠连接,会丢包,没有校验,速度快,无须握手过程;tcp需要首先建立连接,而udp只要绑定端口发送就行,tcp如果建立连接以后,能够保证传送的数据包次序,而udp则不能保证数据包到达的先后次序,甚至会丢包;编程时,TCP面向连接的,即每次收发数据之前必须通过connect建立连接,也是双向的,即任何一方都可以收发数据,协议本身提供了一些保障机制保证它是可靠的、有序的,即每个包按照发送的顺序到达接收方。UDP它是无连接的,不可靠的,因为通讯双方发送数据后不知道对方是否已经收到数据,是否正常收到数据。任何一方建立一个socket以后就可以用sendto发送数据,也可以用recvfrom接收数据。根本不关心对方是否存在,是否发送了数据。它的特点是通讯速度比较快。应采用TCP协议,TCP有连接,过程为可靠连接,不会丢失数据,能保证数据正确传输。网络中使用的IP电话服务采用的是UDP协议,IP电话是实时传输,必须使用UDPUDP不保证可靠交付,但UCP比TCP的开销要小很多,IP电话接受这样的服务质量就可以使用UDP。2、思考和调研目前常用的通信工具之一:QQ的基本实现方式。考虑其各种不同的应用可能采取的是TCP和UDF中的哪种协议。如果需要对本实验结果进行进一步改进,有哪些想法附录:(部分代码)1、清空列表voidCUDPprojectDlg::OnDelete(){//TODO:Addyourcontrolnotificationhandlercodeherem」ist_msg.ResetContent();//清空列表}2、导出消息记录voidCUDPprojectDlg::OnDownload(){//TODO:AddyourcontrolnotificationhandlercodehereCStringcontent;CStringtemp;for(inti=0;i<m_list_msg.GetCount();i++){tempm」ist_msg.GetText(i,temp);〃将列表中内容写入字符串tempcontent+=temp;content+="\r\n";}FILE*fp;消息记录.txt","a+");//打开指定目录fwrite(content,strlen(content),1,fp);//写入字符串fclose(fp);}3、 自定义指定操作voidCUDPprojectDlg::DoAction(LPVOIDlParam,charstr){CUDPprojectDlg*pDlg=(CUDPprojectDlg*)lParam;switch(str){case'n':pDlg->DrawNiu();break;case'z':pDlg->DrawPig();break;case'p':pDlg->DrawPhone();break;case'e':ShellExecute(NULL,"open",/打开网址case 't':ShellExecute(NULL,"open","F:4/.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学食品安全教育教案
- 《2025环球调研联盟加盟合同书》
- 2025短期用工临时合同
- 2025航空货物运输合同管理规范
- 2025合同纠纷解决求助
- 2025成都市房屋租赁合同范本
- 2024北京丰台区高一(下)期中数学(A卷)及答案
- 大数据技术在金融领域的应用实践研究报告
- 石油化工设备维护手册
- 电子商务平台运营与维护指南
- 围棋教学课件教学课件
- 亡灵节课件教学课件
- 区域地理课件教学课件
- 深基坑土方开挖专项施工方案
- 大型集团公司信息安全整体规划方案相关两份资料
- 2024年国家义务教育质量监测四年级英语模拟练习练习卷含答案
- 【双减作业论文】双减背景下初中数学分层作业的设计与实施(共八篇)
- 《积极心理学(第3版)》 课件 第9章 积极的爱
- 4.1植物的身体(课件)三年级下册科学湘科版
- 内蒙古包头市2024年中考英语真题【附真题答案】
- 临床微生物标本处理及操作流程
评论
0/150
提交评论