110 likes | 308 Views
5.2 UDP 客户服务中心、客户端通讯. 信息工程系 向模军. Tel: Email: QQ:. 13684285460 xmj.cn@163.com 156638267. 1 任务引入. 在基于 UDP 的通讯模式中,客户服务中心负责客户端登录管理和状态管理。
E N D
5.2 UDP客户服务中心、客户端通讯 信息工程系 向模军 Tel:Email: QQ: 13684285460xmj.cn@163.com156638267
1 任务引入 在基于UDP的通讯模式中,客户服务中心负责客户端登录管理和状态管理。 客户端首先登录客户服务中心,登录成功后,客户端加入用于通讯管理的组播以监听客户服务中心的组播消息,同时客户服务中心在每个客户登录或退出后通过组播向所有客户端发送新客户加入和客户退出消息。客户服务中心周期性地通过组播通知各个客户端发送响应报文,以检查客户端是否处于离线状态。 2/11
2 任务讨论 • 客户端登录和退出服务器是利用单播报文。 • 客户端登录后要加入组播组,退出时要退出组播组。 • 服务器端构造组播报文,客户端接收并处理组播报文。 3/11
3 IP组播基本知识 IP组播(IP多点传送)时针对点到点的传送和广播传送两种方式而言的,是指在一定的组内对其成员进行的广播,是一种有限的广播。组中的某个成员发出的信息,组中的其他所有成员都能收到,是UDP通讯的一个分支。 (1)IP组播 IP组播是指一个IP报文向一个“机组”的传送,这个包含多个计算机的“机组”有一个单独的IP地址来标示,“机组”地址称为“组播地址”,或者是D类地址。除了目的地址部分,组播报文与普通报文没有区别。“机组”的成员是可以动态变化的,一台计算机有权加入或退出某个“机组”,也可加入多个“机组”,可以向自己没有加入的“机组”发送数据。“机组”包括永久组和临时组两种形式。 IP组播分支在Internet上的转发是由支持组播的路由器来处理的,组播报文内容将发送给网络上“机组”的所有成员,组播报文传递的范围由报文的生存期(TTL)决定。 (2)组播地址 IP组播地址根据永久组和临时组来分配,永久组的IP地址是有Internet管理机构分配的,是保留的D类地址(224.0.0.0至224.0.0.255);临时组点地址则使用除永久组地址外的非保留的D类地址(224.0.1.0至239.255.255.255)。 4/11
3 MulticastSocket类 MulticastSocket类继承了UDP DatagramSocket类,是对DatagramSocket类的扩展,它增加了组播 一些特定操作。 MulticastSocket类允许用户发送和接收使用组播IP的数据报。若要发送或接收组播数据,首先需要创建一个组播套接字,应用MulticastSocket类的构造器创建缺省端口号的以及指定端口号的组播套接字。 使用jionGroup()方法加入到一个组播组,是由leaveGroup()方法脱离一个组播组。 使用send()方法发送组播数据,是由receive()方法接收组播数据。 在具有多重网络接口的情况先,通过调用setInterface()方法可选择组播套接在所使用的接口。 5/11
3 MulticastSocket类 类MulticastSocket:从DatagramSocket继承而来构造方法 public MulticastSocket() public MulticastSocket(int port) :在指定的端口通信 这两个方法都将抛出例外IOException,程序中需要捕获处理。 主要方法 public void joinGroup(InetAddress mcastaddr):加入一个广播组 public void leaveGroup(InetAddress mcastaddr):离开一个广播组 public void setTimeToLive(int ttl):指定数据报离开时间 public void send(DatagramPacket p, byte ttl):在指定的时间内将数据报发送出去 这四个方法都将抛出例外IOException,程序中需要捕获处理。 继承DatagramSocket的方法 public void receive(DatagramPacket p):接收数据 public void send(DatagramPacket p):发送数据 public void connect(InetAddress address, int port):与指定的机器通信 public void disconnect():关闭指定的连接 public void close():关闭Socket 6/11
4 任务实施 • 在JBuilder中新建项目。在项目中建立以下2个包(服务器端,客户端)。 • 服务器端: • “组播服务”server.multicastserverThread类(线程),负责周期性地构造并发送组播报文。 • “UDP客户服务中心主程序”server.mainThread类,负责启动“组播服务” 。 • 客户端: • “组播监听”client.multicastlistenThread类(线程),加入服务器所在的组播组,并且监听并打印服务器端发出的组播报文。 • “客户端主程序”client.mainThread类,负责启动“组播监听”。 7/11
5 任务点评 • MulticastSocket在调用receive()方法前,应调用joinGroup()方法,加入组播组。 • MulticastSocket在调用close()方法前,应调用leaveGroup()方法,退出组播组。 • joinGroup() , leaveGroup() ,send()方法要捕获IOException。 • 客户端和服务端加入的组播IP和端口地址必须一致。 8/11
6 试一试 练一练 • 将客户端和服务端放在不同的网段运行(网段之间用路由器连接),看一看是否能正常工作,为什么? 9/11
7 课外拓展 收集资料,了解组播的工作机制及其应用环境。 10/11