📄 right8_3_14.htm
字号:
<html><head><title>JAVA编程语言</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link rel="stylesheet" href="../../../css/text.css" type="text/css"></head><body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" ><table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td valign="top"> <table width="97%" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF" align="center"> <tr> <td height="244" valign="top"> <p class="pt9-black"> <span class="zhongdian">1. 客户方程序:MulticastClient.java<a name="01"></a></span><br> <br> import java.io.*;<br> import java.net.*;<br> import java.util.*;<br> public class MulticastClient {<br> public static void main(String args[]) throws IOException<br> {<br> MulticastSocket socket=new MulticastSocket(4446); <br> <font color="339900">//创建4446端口的广播套接字</font><br> InetAddress address=InetAddress.getByName("230.0.0.1"); <br> <font color="339900">//得到230.0.0.1的地址信息</font><br> socket.joinGroup(address); <br> <font color="339900">//使用joinGroup()将广播套接字绑定到地址上</font><br> DatagramPacket packet;</p> <p class="pt9-black"> for(int i=0;i<5;i++) {<br> byte[] buf=new byte[256]; <br> <font color="339900">//创建缓冲区</font><br> packet=new DatagramPacket(buf,buf.length); <br> <font color="339900">//创建接收数据报</font><br> socket.receive(packet); <font color="339900">//接收</font><br> String received=new String(packet.getData()); <br> <font color="339900">//由接收到的数据报得到字节数组,</font><br> <font color="339900">//并由此构造一个String对象</font><br> System.out.println("Quote of theMoment:"+received); <br> <font color="339900">//打印得到的字符串</font><br> } <font color="339900">//循环5次</font><br> socket.leaveGroup(address); <br> <font color="339900">//把广播套接字从地址上解除绑定</font><br> socket.close(); <font color="339900">//关闭广播套接字</font><br> }<br> }</p> <p class="pt9-black"> <span class="zhongdian">2. 服务器方程序:MulticastServer.java<a name="02"></a></span><br> <br> public class MulticastServer{<br> public static void main(String args[]) throws java.io.IOException <br> {<br> new MulticastServerThread().start(); <br> <font color="339900">//启动一个服务器线程</font><br> }<br> }</p> <p class="pt9-black"> <span class="zhongdian">3. 程序MulticastServerThread.java<a name="03"></a></span><br> <br> import java.io.*;<br> import java.net.*;<br> import java.util.*;<br> public class MulticastServerThread extends QuoteServerThread <br> <font color="339900">//从QuoteServerThread继承得到新的服务器线程类MulticastServerThread</font><br> {<br> Private long FIVE_SECOND=5000; <font color="339900">//定义常量,5秒钟</font><br> public MulticastServerThread(String name) throws IOException <br> {<br> super("MulticastServerThread"); <br> <font color="339900">//调用父类,也就是QuoteServerThread的构造函数</font><br> }</p> <p class="pt9-black"> public void run() <font color="339900">//重写父类的线程主体</font><br> {<br> while(moreQuotes) { <br> <font color="339900">//根据标志变量判断是否继续循环</font><br> try{<br> byte[] buf=new byte[256]; <br> <font color="339900">//创建缓冲区</font><br> String dString=null;<br> if(in==null) dString=new Date().toString(); <br> <font color="339900">//如果初始化的时候打开文件失败了,<br> //则使用日期作为要传送的字符串</font><br> else dString=getNextQuote(); <br> <font color="339900">//否则调用成员函数从文件中读出字符串</font><br> buf=dString.getByte(); <br> <font color="339900">//把String转换成字节数组,以便传送send it</font><br> InetAddress group=InetAddress.getByName("230.0.0.1"); <br> <font color="339900">//得到230.0.0.1的地址信息</font><br> DatagramPacket packet=new DatagramPacket(buf,buf.length,group,4446);<br> <font color="339900">//根据缓冲区,广播地址,和端口号创建DatagramPacket对象</font><br> socket.send(packet); <font color="339900">//发送该Packet</font><br> try{<br> sleep((long)(Math.random()*FIVE_SECONDS)); <br> <font color="339900">//随机等待一段时间,0~5秒之间</font><br> }catch(InterruptedException e) { } <font color="339900">//异常处理</font><br> }catch(IOException e){ <font color="339900">//异常处理</font><br> e.printStackTrace( ); <font color="339900">//打印错误栈</font></p> <p><span class="pt9-black"> moreQuotes=false; <font color="339900">//置结束循环标志</font><br> }<br> }<br> socket.close( ); <font color="339900">//关闭广播套接口</font><br> }<br> }<br> <br> 至此,Java网络编程这一章已经讲解完毕。读者通过学习,应该对网络编程有了一个清晰的认识,可能对某些概念还不是十分的清楚,还是需要更多的实践来进一步掌握。编程语言的学习不同于一般的学习,及其强调实践的重要性。读者应该对URL网络编程,Socket中的TCP,UDP编程进行大量的练习才能更好的掌握本章中所提到的一些概念,才能真正学到Java网络编程的精髓!<br> <br> <font color="000099">最后几个小节所举的例子,读者务必要亲自试验一下,如果遇到问题,想办法解决之。最好能根据自己的意图加以改进。这样才能更好的理解这几个程序,理解其中所包含的编程思想。</font></span><br> </p> </td> </tr> </table> </td> </tr></table></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -