王兵2013213762(1301302)通信软件技术及应用大作业实验报告_第1页
王兵2013213762(1301302)通信软件技术及应用大作业实验报告_第2页
王兵2013213762(1301302)通信软件技术及应用大作业实验报告_第3页
王兵2013213762(1301302)通信软件技术及应用大作业实验报告_第4页
王兵2013213762(1301302)通信软件技术及应用大作业实验报告_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

通信软件技术及应用姓名:王兵学号:2013213762班级:1301302题目序号:2一.题目内容二.简单的分析设计加消息处理框架的具体功能,判断是哪个套接字上发生了网络事件,使用WSAGET-SELECTEVENT三.程序源代码输入参数:WPARAMwParam消息传入参数,此处传入的是套接字句柄LPARAMIParam消息传入参数,此处传入的是事件类型。输出参数;TURE表示成功FALSE表示失败LRESULTCLANChatDlg::OnRecvFrom(WPARAMwParam,LPARAMlParam){intiResult;time_tticks;charbuff[MAXLINE],info[MAXLINE];charrecvbuf[MAXLINE];structsockaddr_incliaddr;intaddrlen=sizeof(sockaddr_in);CStringstr;memset(recvbuf,0,MAXLINE);//获取当獭前时骸间ticks=time(NULL);memset(buff,0,sizeof(buff));sprintf_s(buff,MAXLINE,"%.24s\r\n",ctime(&ticks));//判断网络事件if(WSAGETSELECTERROR(lParam))m_List.InsertString(0,"套接字错误");else{switch(WSAGETSELECTEVENT(lParam)){caseFD_READ://接收数据iResult=recvfrom(m_Socket,recvbuf,MAXLINE,0,(SOCKADDR*)&cliaddr,&addrlen);if(iResult==SOCKET_ERROR){sprintf_s(info,MAXLINE,"%s接收数据发生错误,错误号:%d",buff,WSAGetLastError());str=info;m_List.InsertString(0,str);return0;}sprintf_s(info,MAXLINE,"%s接收到来自%s的数据:",buff,inet_ntoa(cliaddr.sin_addr));str=info;m_List.InsertString(0,str+recvbuf);//更新通信对方地址·m_peer=cliaddr;break;default:break;}}return0;}2实现网络的初始化功能OnBnClickedBegin()接字的初始化,创建以及网络事件的注册等功能,代码如下voidCLANChatDlg::OnBnClickedBegin(){CSocketFrameframe;intiResult=0;UpdateData(TRUE);//WindowsSocketsDll初始化frame.start_up();//程序作为服务器if(m_nServerType==SERVER){//为服务器的本地地址m_local设置用户输入的IP和端口号memset(&m_local,0,sizeof(m_local));m_local.sin_family=AF_INET;m_local.sin_addr.S_un.S_addr=htonl(m_ulIP);m_local.sin_port=htons(m_usPort);//创建服务器端的数据报套接字并在指定端口号上监听m_Socket=frame.udp_server(0,m_usPort);if(m_Socket==-1){m_List.InsertString(0,"服务器启动失骸败");return;}m_List.InsertString(0,_T("服务器已启动"));}else{//创建客户端的数据报套接字并向服务器请求建立连接UpdateData(TRUE);if(m_ulIP==0||m_usPort==0){m_List.InsertString(0,"IP地址不能为空?");return;}//指明服务器的地址·m_peer为用户输入的IP和端口号memset(&m_peer,0,sizeof(m_peer));m_peer.sin_family=AF_INET;m_peer.sin_addr.S_un.S_addr=htonl(m_ulIP);m_peer.sin_port=htons(m_usPort);//创建客户端的数据报套接字?m_Socket=frame.udp_client(m_ulIP,m_usPort,FALSE);if(m_Socket==-1){m_List.InsertString(0,"客户端启动失败");return;}m_List.InsertString(0,_T("客户端已启动"));}iResult=WSAAsyncSelect(m_Socket,m_hWnd,WM_READ,FD_READ);if(iResult==SOCKET_ERROR){m_List.InsertString(0,"WSAAsyncSelect设定失败");return;}//更新对话框控件的可操作性GetDlgItem(IDC_SENDTEXT)->EnableWindow(TRUE);GetDlgItem(IDC_SEND)->EnableWindow(TRUE);GetDlgItem(IDC_IPADDRESS)->EnableWindow(FALSE);GetDlgItem(IDC_RADIO_SERVER)->EnableWindow(FALSE);GetDlgItem(IDC_RADIO_CLIENT)->EnableWindow(FALSE);GetDlgItem(IDC_PORT)->EnableWindow(FALSE);GetDlgItem(IDC_BEGIN)->EnableWindow(FALSE);}3实现聊天内容的发送功能OnBnClickedSend()函数中获取用户输入的聊天内容,将其封装到UDP协议数据中发送给目标地址,代码如下voidCLANChatDlg::OnBnClickedSend(){time_tcharticks;buff[MAXLINE],info[MAXLINE];intiResult=-1;//更新对话框里的数据YUpdateData(TRUE);if(m_SendText.GetLength()>MAXLINE){m_List.InsertString(0,"发送内容超长!?");return;}if(m_peer.sin_addr.S_un.S_addr==0){m_List.InsertString(0,"目标地址为空,请确?定正确的目标地址!");return;}//获取当前时骸间ticks=time(NULL);memset(buff,0,sizeof(buff));sprintf_s(buff,MAXLINE,"%.24s\r\n",ctime(&ticks));if(m_nServerType==SERVER){sprintf_s(info,MAXLINE,"%s服务器向%s发送数据Y:",buff,inet_ntoa(m_peer.sin_addr));}else{sprintf_s(info,MAXLINE,"%s客户端向%s发送数据:",buff,inet_ntoa(m_peer.sin_addr));}//发ぁ?送í数簓据YiResult=sendto(m_Socket,m_SendText.GetBuffer(m_SendText.GetLength()),m_SendText.GetLength(),0,(SOCKADDR*)&m_peer,sizeof(m_peer));if(iResult==SOCKET_ERROR){sprintf_s(info,MAXLINE,"sendto函数调用错误

温馨提示

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

最新文档

评论

0/150

提交评论