《计算机网络系统实践》报告-局域网实时通讯工具_第1页
《计算机网络系统实践》报告-局域网实时通讯工具_第2页
《计算机网络系统实践》报告-局域网实时通讯工具_第3页
《计算机网络系统实践》报告-局域网实时通讯工具_第4页
《计算机网络系统实践》报告-局域网实时通讯工具_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

23/23《计算机网络系统实践》报告设计题目:局域网实时通讯工具设计题目:局域网实时通讯工具学生姓名:学号:专业班级:一、设计要求熟悉WinSockAPI主要函数的使用;掌握相应的开发工具对WindowsSocketAPI的封装;制作基于局域网的一对一网络即时通讯工具二、开发环境与工具Windows10系统,VisualStudio三、设计原理1. 客户—服务器方式(C/S模式)网络软件的通用体系结构客户(Client)和服务器(Server)是指通信中所涉及的两个应用进程。客户—服务器方式所描述的是进程之间服务和被服务的关系。在下图中,主机A运行客户程序而主机B运行服务器程序。2. 最简单的Socket通信流程一个只有客户方向服务方发信息的单向通信,并且也只有客户方会主动提出断开连接的最简单的情形(相反过程的原理是一样的),其双方Socket之间的关系如下图所示。四、系统功能描述及软件模块划分此工程设计两个窗口,分别是客户端和服务器窗口,完成的主要功能是:服务器端的开启与关闭客户端连接服务器,当服务器未开启时,显示连接失败,可以主动断开连接,并在服务器端显示。多客户端向服务器发出信息等。设计步骤窗口建立:主要程序: //初始化套接字 GetDlgItem(IDC_BTN_UNLINK)->EnableWindow(FALSE); if(m_socket->Create()==FALSE) { m_edt_info.SetSel(-1,-1); m_edt_info.ReplaceSel(_T("创建套接字失败\r\n")); GetDlgItem(IDC_BTN_LINK)->EnableWindow(FALSE); } else { m_edt_info.SetSel(-1,-1); m_edt_info.ReplaceSel(_T("创建套接字成功\r\n")); } m_socket->SetUI(this); returnTRUE;//除非将焦点设置到控件,否则返回TRUE}voidCAsyncClientDlg::OnSysmand(UINTnID,LPARAMlParam){ if((nID&0xFFF0)==IDM_ABOUTBOX) { CAboutDlgdlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysmand(nID,lParam); }}voidCAsyncClientDlg::DealReceive(intnErrorCode){ constintbuf_size=512; charrecv_buf[buf_size]={0}; if(nErrorCode==0) { intnLength=m_socket->Receive(recv_buf,buf_size-3); strcat_s(recv_buf,"\r\n"); CStringtp_str(""); tp_str.Format(_T("%s"),CString(recv_buf)); m_edt_info.SetSel(-1,-1); m_edt_info.ReplaceSel(_T("RECV:")); m_edt_info.ReplaceSel(tp_str); }}voidCAsyncClientDlg::DealClose(intnErrorCode){ m_edt_info.SetSel(-1,-1); m_edt_info.ReplaceSel(_T("服务器断开连接\r\n")); GetDlgItem(IDC_BTN_LINK)->EnableWindow(TRUE); GetDlgItem(IDC_BTN_UNLINK)->EnableWindow(FALSE);}voidCAsyncClientDlg::DealSend(intnErrorCode){ if(nErrorCode) { m_edt_info.SetSel(-1,-1); m_edt_info.ReplaceSel(_T("发送失败\r\n")); }}voidCAsyncClientDlg::OnBnClickedBtnLink(){ //TODO:在此添加控件通知处理程序代码 CEdit*p_edt=(CEdit*)GetDlgItem(IDC_EDT_INFO); GetDlgItem(IDC_BTN_LINK)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_UNLINK)->EnableWindow(FALSE); if(m_socket->m_hSocket==INVALID_SOCKET) m_socket->Create(); if(m_socket->Connect(_T("127.0.0.1"),10001)==0) { if(m_socket->GetLastError()==WSAEWOULDBLOCK) { p_edt->SetSel(-1,-1); p_edt->ReplaceSel(_T("正在连接...请稍等\r\n")); } else { p_edt->SetSel(-1,-1); p_edt->ReplaceSel(_T("尝试连接时出错\r\n")); } }}voidCAsyncClientDlg::OnBnClickedBtnUnlink()//断开连接{ //TODO:在此添加控件通知处理程序代码 m_socket->Close(); GetDlgItem(IDC_BTN_LINK)->EnableWindow(); GetDlgItem(IDC_BTN_UNLINK)->EnableWindow(FALSE); m_edt_info.SetSel(-1,-1); m_edt_info.ReplaceSel(_T("断开连接\r\n"));}voidCAsyncClientDlg::OnBnClickedBtnSend()//send{ //TODO:在此添加控件通知处理程序代码 CStringsend_str; GetDlgItem(IDC_EDT_SEND)->GetWindowTextW(send_str); //char*pStr=(LPSTR)(LPCTSTR)send_str; intlen=WideCharToMultiByte(CP_ACP,0,send_str,send_str.GetLength(),NULL,0,NULL,NULL); m_edt_info.SetSel(-1,-1); char*cstr=newchar[len+1]; WideCharToMultiByte(CP_ACP,0,send_str,send_str.GetLength(),cstr,len,NULL,NULL); cstr[len]='\0'; //strcpy_s(cstr,strlen(pStr)+1,pStr); if(m_socket->Send(cstr,len)==SOCKET_ERROR) { if(m_socket->GetLastError()!=WSAEWOULDBLOCK) { m_edt_info.ReplaceSel(_T("发送时出错\r\n")); return; } } send_str+=CString("\r\n"); CStringtp_str("SEND:"); m_edt_info.ReplaceSel(tp_str+send_str); deletecstr;}//AsyncServerDlg.cpp:实现文件//voidCAsyncServerDlg::OnBnClickedBtnStart(){ //TODO:在此添加控件通知处理程序代码 if(m_server->m_hSocket==INVALID_SOCKET) { if(m_server->Create(10001)==FALSE) { ShowInfo(_T("Error:创建套接字失败")); return; } } if(m_server->Listen()==FALSE) { ShowInfo(_T("侦听端口失败")); } else { ShowInfo(_T("侦听套接字成功")); GetDlgItem(IDC_BTN_START)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_STOP)->EnableWindow(TRUE); }}voidCAsyncServerDlg::OnBnClickedBtnStop(){ //TODO:在此添加控件通知处理程序代码 m_server->UICloseCmd(); GetDlgItem(IDC_BTN_STOP)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_START)->EnableWindow(TRUE); ShowInfo(_T("服务器关闭"));}关键问题及其解决方法要实现实验要求,主要的程序流程设计如下要实现这样一个完整流程需要三个套接字对象:客户端一个(我们称为“客户Socket”),服务器端两个(一个用于监听,称为“监听Socket”;另一个用于接收客户发来的信息,称为“服务Socket”),这三个套接字对象对应三个Socket类,都继承自CAsyncSocket设计结果利用EnableWindow函数实现某些按钮不可控的功能。当服务器未开启时,客户端点击连接按钮显示“连接失败”开启服务器后,客户端点击连接会显示“连接成功”,IP地址和端口号内置可以发送信息服务器停止后,客户端自动断开客户端也能主动断开软件使用说明开启服务器端和客户端点击服务器端“启动”点击客户端“连接”输入内容,点击发送九、参考资料《WindowsSocket网络编程》(Bob著),徐磊等译《精通WindowsSocket编程》《Windows网络编程》AnthonyJones,JimOhlund著十、验收时间及验收情况20XX年1月4日下午,通过验收十一、设计体会通过本次的工程设计将书本上的知识运用到实际,让我对网络协议有了更深层析的了解,了解和初步掌握了通过WinSockAPI编程的过程,也掌握了一些MFC编程的能力,在我此间遇到了一些问题,也通过上网和查找资料等方法解决,对我来说是一次全新的经历。在做完本次的设计之后,也让我熟悉在VS上的编程过程,同时在其中遇到的一些问题,也让我明白了,编程要合乎规范,不然,很容易造成错误。必做部分一、实验目的:1.认识路由器的端口,型号2.掌握路由器的路由配置3.理解网络互联的基本原理实验环境和设备1.本实验在PC机上利用模拟软件PacketTracerV6进行操作实验内容路由器接口的配置静态路由配置默认路由配置动态路由配置实验步骤路由器接口的配置拓扑结构图为主机PC0,PC1,PC2配置IP地址,子网掩码和默认网关网络设备接口IP地址子网掩码默认网关PC0FastEthernet192.168.1.2255.255.255.0192.168.1.1PC1FastEthernet192.168.2.2255.255.255.0192.168.2.1PC2FastEthernet192.168.3.2255.255.255.0192.168.3.1配置PC0配置PC1配置PC2为路由器的各个接口分配IP地址和子网掩码,交换机不用配置网络设备接口IP地址子网掩码默认网关Router0F0/0192.168.1.1255.255.255.0S2/0172.16.1.2255.255.255.0Router1F0/0192.168.2.1255.255.255.0S3/0172.16.2.2255.255.255.0Router2F0/0192.168.3.1255.255.255.0S2/0172.16.1.1255.255.255.0S3/0172.16.2.1255.255.255.0配置Router0配置Router1配置Router2查看路由器的路由表Router0的路由表Router1的路由表Router2的路由表测试主机之间的连通性PC0,PC2PC1,PC22.配置静态路由(1)在Router0中添加一条到网络192.168.3.0的静态路由。(2)再去查看Router0的路由表,与步骤(2)中的路由表对比,观察路由表的变化情况。Router0添加静态路由后的路由表:在Router2中添加一条到网络192.168.1.0的路由。Router2添加路由后的路由表(4)再次测试PC0与PC2的连通性PC0与PC2的连通性(5)在Router1和Router2中各添加一条静态路由,以实现PC1与PC2的互通。Router1添加静态路由Router1路由表Router2添加静态路由Router2路由表PC1与PC2的连通性测试PC0与PC1的连通性PC0与PC1的连通性分别在Router0和Router1中添加静态路由,以实

温馨提示

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

评论

0/150

提交评论