实验5广播通信设计说明

上传人:人*** 文档编号:557108433 上传时间:2022-08-12 格式:DOC 页数:13 大小:236.50KB
返回 下载 相关 举报
实验5广播通信设计说明_第1页
第1页 / 共13页
实验5广播通信设计说明_第2页
第2页 / 共13页
实验5广播通信设计说明_第3页
第3页 / 共13页
实验5广播通信设计说明_第4页
第4页 / 共13页
实验5广播通信设计说明_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《实验5广播通信设计说明》由会员分享,可在线阅读,更多相关《实验5广播通信设计说明(13页珍藏版)》请在金锄头文库上搜索。

1、计算机与信息学院计算机网络系统实践报告设计题目:广播通信设计学生姓名:学 号:专业班级:计算机06-4班2009年9月合肥工业大学课程设计任务书姓名学号班级计算机06-4班计目 设题广播通信设计成绩课 程 设 计 主 要 内 容1 掌握广播通信技术;2. 了解基于 Win sock API的消息机制和编程应用方法;3. 了解Windows SDK编程架构。4. Win Sock API编程,实现局域网消息广播的实用程序;5. 通过查阅资料,简述单播、广播、多播的区别和联系,以及各自的优缺点和 适应范围。指 导 教 师 评 语签名:200年 月日一、设计要求1. Win Sock API编程,实

2、现局域网消息广播的实用程序;2 通过查阅资料,简述单播、广播、多播的区别和联系,以及各自的优缺点 和适应范围。、开发环境与工具Microsoft Visual Studio 2008.Win dows XP SP3.二、设计原理Socket接口是网络编程(通常是TCP/IP协议,也可以是其他协议)的API。最早的Socket接口是Berkeley 接口,在Un ix操作系统中实现。Win Sock 也是一个基于 Socket模型的 API,在 Microsoft Windows操作系统类中使用。它在 Berkeley 接口函数的基础之上,还增加了基于消息驱动机制的Windows扩展函数。Win

3、scok1.1只支持 TCP/IP网络,WinSock2.0增加了对 更多协议的支持。单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。多播:“多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视 频会议、网上视频点播特别适合采用多播方式。因为如果采用单播方式,逐个节 点传输,有多少个目标节点,就会有多少次传送过程,这种方式显然效率极低, 是不可取的;如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完 数据,但是显然达不到区分特定数据接收对象的目的。采用多播方式,既可

4、以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。广播:“广播”在网络中的应用较多,如客户机通过DHCP1动获得IP地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。四、系统功能描述及软件模块划分该软件能实现的功能:该软件主要实现了局域网聊天功能。通过定义一个消息结构体,把局域网通 信中必要的信息包含进来便于操作。发送的消息包含了自己的IP地址和名称,以及类型,程序中有一个线程专门接收并处理各种不同的消息。在同一个局域网中运行程序通过发送组播消息可以发现彼此,接收到对方的消息后就把对方加入 好友列表中。之后就可以选择一个好友发送消息

5、,或者群发消息。每个用户上线 时都会广播自己上线的消息,其他用户收到后更新好友列表,把其IP和对应的用户名添加到好友列表中;下线时广播自己下线的消息,其他用户把其IP和用户名从好友列表中删除。软件的模块包括:套接字管理模块和主程序中的消息循环模块。五、设计步骤定义的一个消息类型和结构为:enum SendTypeLOAD/上线REFRESH_SE|LF 刷新NOTIFY_ONE_I_EXISJ7回应消息表示自己存在CHANGE_NAME修改名称SEND_MSG_T0_ONIE向某个特定IP发送消息SEND_MSG_TO_ALL 广播消息UNLOAD/下线;class MessageStruct

6、public :MessageStruct () type = LOAD msg_nam|0 =0 ; ip 0 =0 ; dialog 0 =0 ;SendType type ;char msg_nam32;char ip 32;char dialog 8192;;套接字管理模块的核心代码如下:bool SocketManger: InitSocket (unsigned short port )/初始化套接字m_socket = socket (AF_INET , SOCK_DGRAM;if ( INVALID_SOCKET= m_socket)AfxMessageBox( Create

7、socket failed! , MB_O)K return false ;SOCKADDR_INocketSrv ;socketSrv . sin_family = AF_INET;socketSrv . sin_port = htons (port );socketSrv . sin_addr . S_un. S_addr = htonl (INADDR_ANYif ( SOCKET_ERROR bind ( m_socket, ( SOCKADID)& socketSrv , sizeof ( SOCKADDR AfxMessageBox( Bind socket failed! );c

8、losesocket (m_socket);return false ;return true ;bool SocketManger: JoinGroupCast (const std : string & multiIp )/加入组播组struct ip_mreq ipmr;int len = sizeof (ipmr);ipmr. imr_multiaddr . s_addr = inet_addr (multiIp . c_str ();ipmr. imr_interface. s_addr = htonl (INADDR_ANYsetsockopt (m_socket, IPPROTO

9、P IP_ADD_MEMBERSH(P char * )& ipmr, len ); return true ;消息循环的主要代码如下:DWORWINAPI CChaChaChatDlg: RecvProc(LPVOID lpParameter )CChaChaChatDlg * pDlg = ( ParameterToThread *) lpParameter )- pDlg;HWNDiwnd = ( ParameterToThread *) lpParameter )- hwnd;SOCKADDR_INddrFrom;int len = sizeof (SOCKADDRMessageStr

10、uct * pMessage = new MessageStruct ;int reval ;char nameTemp32 = 0;char ip 32 = 0 ;char msQ8192 = 0 ;char buff 8300 = 0 ;CString ownIp;CString receivedIp = ip;while (true )reval =recvfrom (SocketManger: m_socket,( char *) pMessage, sizeof (MessageStruct ),0,( SOCKADD)& addrFrom ,&len );if (SOCKET_ER

11、ROR reval )break ;SendType type = pMessage-type ;strncpy ( nameTemppMessag& msg_namesizeof (nameTem1);strncpy (ip , pMessage-ip , sizeof (ip )-1);strncpy ( msg pMessag& dialog , sizeof (msg-1);switch (type )case LOADownIp = pDlg- GetOwnlp();if ( ip = ownIp)/上线通知自己不做处理break;pDlg - PushNameToMapp , na

12、meTemppDlg - UpdateTheList ();:PostMessage(hwnd, WM_RECVDATA_NOTIFY_EX0ST LPARA)&addrFrom);break ;case REFRESH_SELFownIp = pDlg- GetOwnIp();if ( ip = ownIp)/上线通知自己不做处理break;:PostMessage(hwnd, WM_RECVDATA_ANSWER_RE,0RESPARA)&addrFrom);break ;case CHANGE_NAMEpDlg - ChangeNameFromMapp , nameTemppDlg -

13、UpdateTheList ();break ;case NOTIFY_ONE_I_EXISTpDlg - PushNameToMapP , nameTemppDlg - UpdateTheList ();break ;case SEND_MSG_TO_O NEsprintf (buff , %s 对你说:rn%sn, nameTemp msg;:PostMessage(hwnd, WM_RECVDATA_UPDATE_JEXT_PARAM3uff );break ;case SEND_MSG_TO_ALLownIp = pDlg- GetOwnIp();if ( ip = ownIp)/上线

14、通知自己不做处理break;sprintf (buff , %s 对所有人说:rn%sn, nameTemp msg;:PostMessage(hwnd, WM_RECVDATA_UPDATE_TEXlPARAMbuff ); break ;case UNLOADpDlg - QuitNameFormMap ip );pDlg - UpdateTheList ();break ; /quit map - update the listdefault : break;delete lpParameter ;return 0;发送信息模块:void CChaChaChatDlg: OnBnClickedButtonSend () /send to *int val = m_toAll . GetCheck();GetDlgltemText (IDC_EDIT_INPUT m_msgInput);char msgBuff8300 = 0 ;MessageStruct * pMsgStruct = new MessageStruct ;strcpy (pMsgStruct -msg_namem_userName GetBuffer ( m_userNameGetLength ()

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号