JAVA网站制作之使用UDP Sockets手艺完成IP多点传送2(...
前些天,在CSDN上看到了一个消息,说是ASP.NETAJAX成功在Linux上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。DatagramPacket类我们可使用DatagramPacket类创立一个用于发送的数据报,而当吸收UDP数据报时,可使用DatagramPacket类读取数据报中的数据,发送者及别的信息。
为了创立一个数据报并发送到远地体系,可使用上面的机关器:
PublicDatagramPacket(byteibuf,intlength,InetAddressiaddr,intiport,);
ibuf是编码信息数据的字节数组,它的长度length就是数据报放在个中的字节数组的长度,iaddr是一个InetAddress对象,存储着吸收方的主机名和IP地点等信息,iport标识数据报发送到吸收主机的端口。
为了吸收数据报,必需利用DatagramPacket机关器,其原型为:publicDatagramPacket(byteibuf,intilength);ibuf是指吸收的数据报的数据部分,ilength是该部分数据的长度。假如ilength小于呆板吸收的UDP数据报的尺寸,过剩的字节将被Java疏忽。
别的,类中有一些办法(method)可让我们失掉一些相干的信息:
publicintgetLength(); //失掉数据报中数据块的字节尺寸
publicbytegetData();//失掉吸收数据报中的数据
publicInetAddressgetAddress(); //为发送者供应一个InetAddress对象
publicintgetPort(); //失掉UDP端口
值得注重的是,TCPsockets的编程中,我们不必将传送的数据分块,但是,当我们创立一个基于UDP的收集通信使用程序时,必需创立一套办法,在运转时候决意需支解的数据报的长度。关于TCP/IP,最年夜的数据报能够含有65507字节的数据,但是,主机仅能吸收最多548字节的数据,撑持8192字节的年夜数据报的平台是使用IP层对数据报举行支解的。假如在传送时代,任何含有IP报文的一个数据块丧失,城市形成全部UDP数据报的丧失,因而,我们在断定使用中数据报尺寸时,对其尺寸的公道性必定要审慎。
上面就是支解数据的一个例子:
//轮回地从输出流input中读一行数据
while((nextLine=input.readLine())!=null){
//界说一个空数据报,其尺寸为512
mcastBuffer=newbyte;
//假如读进的数据的长度年夜于界说的数据报的长度,
//则利用界说的长度,不然利用读进数据的长度
if(nextLine.length()>mcastBuffer.length){
sendLength=mcastBuffer.length;
}else{
sendLenth=nextLine.length();
}
//将读进的数据转换为byte范例
lineData=nextLine.getBytes();
//将数据复制到用于创立数据报的byte数组
for(inti=0;i<sendLength;i++){
mcastBuffer=lineData;
}
……创立数据报,发送或吸收……
}
MulticastSocket类
Java的MulticastSocket类是实行IP多点传送收集特性的关头,它同意我们利用多点传送IP发送或吸收UDP数据报。MulticastSocket的机关器为:
publicMulticastSocket()throwsIOException; //创立一个多点传送socket
publicMulticastSocket(intport)throwsIOException;//在指定端口创立一个多点传送socket
别的,类中别的经常使用的办法有:
publicvoidjoinGroup(InetAddressmcastaddr)throwsIOException{}//到场多点传送组
publicvoidleaveGroup(InetAddressmcastaddr)throwsIOException{}//分开多点传送组
publicsynchronizedvoidsend(DatagramPacketp,bytettl)throwsIOException{} //发送数据报
publicsynchronizedvoidreceive(DatagramPacketp,bytettl)throwsIOException{} //吸收数据报
创立一个DatagramPacket对象以后,我们必需响应地创立一个MulticastSocket对象,如许,数据报就能够利用send()办法发送了。上面的代码演示了怎样创立MulticastSocket、发送和吸收IP多点传送数据报:
intmultiPort=2345; //界说端标语,非超等用户应利用1024以上的端口
intttl=1; //设定TTL值
InetAddressmultiAddr=InetAddress.getByName(″224.0.1.100″); //设定多点传送IP
byteSmultiBytes={H,e,1,1,O};//界说一个内容为“Hello”的数据报
//创立多点传送数据报
DatagramPacketSmultiDatagramnewDatagramPacket(SmultiBytes,SmultiBytes,length,multiAddr,multiPort);
MulticastSocketmultiSocket=newMulticastSocket(); //创立多点传送socket
multiSocket.send(SmultiDatagram,ttl); //发送数据报(不到场到组中)
……
byteRmultiBytes=newbyte; //界说一个空数据报,长度为256字节
//创立吸收数据报
DatagramPacketRmultiDatagram=newDatagramPacket(RmultiBytes,RmultiBytes.length);
multiSocket.joinGroup(multiAddr); //到场到多点传送组中
multiSocket.receive(RmultiDatagram);//吸收UDP数据报
……
multiSocket.leaveGroup(multiAddr); //分开多点传送组
multiSocket.close(); //封闭多点传送socket
当挪用joinGroup()办法时,呆板将存眷沿着收集传送属于特定多点传送组的任何IP报文,也就是说,呆板具有了一个邮箱。主机还应利用IGMP响应地呈报组的利用。关于多IP地点的呆板,应设置数据报发送的接口:setInterface(oneOfMyLocalAddrs);
在DatagramSocket中没有相似setSoTimeout()的办法设置超时。
IP多点传送使用程序的开辟流程
因为IP多点传送次要用于同组中成员的交换,因而,使用程序的开辟流程大致以下:
1.创立一个需发送的按划定编址的数据报DatagramPacket;
2.创建一个用于发送和吸收的MulticastSocket;
3.到场一个多点传送组;
4.将数据报放进MulticastSocket中传送进来;
5.守候从MulticastSocket吸收数据报;
6.解码数据报提失信息;
7.依据失掉的信息作出回应;
8.反复5―7步;
9.分开该多点传送组,封闭MulticastSocket。
停止语
在实践使用中,发送和吸收数据倡议分离以独自的线程同时运转,别的,假如需在屏幕上显现,倡议利用两个线程在两个分歧的窗口分离卖力显现发送的数据和吸收的数据。□
作者单元:建立银行云南保山区域分行 (云南保山678000)
Java到底会发战成什么样,让我们拭目以待吧,我始终坚信着java会更好。以上都是俺个人看法,欢迎大家一起交流. 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 是一种将安全性(Security)列为第一优先考虑的语言 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 Java是一种计算机编程语言,拥有跨平台、面向对java 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 是一种使网页(Web Page)产生生动活泼画面的语言 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 是一种使网页(Web Page)产生生动活泼画面的语言
页:
[1]