柯侧耳倾听者 - 云代码空间
—— 翱翔在Java世界的海洋之上
一、实验目的 1、掌握组播的工作原理,理解组播与广播的区别。 2、熟悉组播的相关应用,掌握组播报文的发送和接收以及Java组播程序设计方法。
二、预习内容及要求(要求写出预习内容) 1、掌握不同类型的输入输出流类,标准数据流、文件流、数据输入输出流、对象流等。 2、编程时,应考虑异常处理。
三、实验内容、操作过程及实验结果记录 设计一个简单的组播报文发送程序。 应用背景:模仿RIPv2协议,程序每隔5s定时向组播地址229.0.0.9发送报文,端口号为5000。组播报文格式为:IP地址%学号%姓名%当前时间,例如:x.x.x.x%20010101%李明%2015-08-12 10:22:22。 1、提示:定期发送组播报文程序流程图建议
2、要求完成程序代码编写、调试与运行通过。 (1)发送端程序:
import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket;
public class MulticastSender {
public static void main(String[] args)throws Exception { InetAddress group = InetAddress.getByName("229.0.0.9"); MulticastSocket ms = new MulticastSocket(); ms.joinGroup(group); String msg = "hello,everybody"; byte[] b = msg.getBytes(); DatagramPacket dp = new DatagramPacket(b, b.length,group,5000); ms.send(dp); System.out.println("发送问候给:"+group+":"+5000); ms.close(); } }
(2)接收端程序:
import java.io.IOException; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket;
public class MulticastReceiver {
public static void main(String[] args) throws IOException{ InetAddress group = InetAddress.getByName("229.0.0.9"); MulticastSocket ms = new MulticastSocket(5000); ms.joinGroup(group); byte[] b = new byte[100]; DatagramPacket dp = new DatagramPacket(b, b.length); ms.receive(dp); String str = new String(dp.getData(),0,dp.getLength()); System.out.println("从"+dp.getAddress().toString()+":" +dp.getPort()+"收到消息"); System.out.println(str); ms.leaveGroup(group); ms.close(); } }
四、实验过程中所遇问题思考与讨论(可写个人体会,或相关理论知识,根据个人具体情况选做) 通过这次的学习与实验,我初步掌握了网络编程中组播Socket的一些用法和问题,也更加了解了网络编程中组播的概念,为今后更好的学习网络编程做好铺垫,在学习的过程中,我更加深刻的体会到与老师和同学间的交流与合作是多么的重要,所以在今后的学习与实验当中,要善于发现问题,更要及时与老师反馈问题所在,并与老师和同学交流学习经验,共同解决问题,这样才能更好的学好网络编程。
|