仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 762|回复: 18
打印 上一主题 下一主题

[学习教程] JAVA网站制作之使用UDP Sockets手艺完成IP多点传送2(...

[复制链接]
柔情似水 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:43:37 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
前些天,在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[512];
  //假如读进的数据的长度年夜于界说的数据报的长度,
  //则利用界说的长度,不然利用读进数据的长度
  if(nextLine.length()>mcastBuffer.length){
  sendLength=mcastBuffer.length;
  }else{
  sendLenth=nextLine.length();
  }
  //将读进的数据转换为byte范例
  lineData=nextLine.getBytes();
  //将数据复制到用于创立数据报的byte数组
  for(inti=0;i<sendLength;i++){
  mcastBuffer[i]=lineData[i];
  }
  ……创立数据报,发送或吸收……
  }

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]; //界说一个空数据报,长度为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会更好。以上都是俺个人看法,欢迎大家一起交流.
变相怪杰 该用户已被删除
18#
发表于 2015-4-18 04:46:23 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
简单生活 该用户已被删除
17#
发表于 2015-4-13 07:34:40 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
飘灵儿 该用户已被删除
16#
发表于 2015-4-12 15:02:41 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
分手快乐 该用户已被删除
15#
发表于 2015-4-9 13:48:50 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
愤怒的大鸟 该用户已被删除
14#
发表于 2015-3-29 16:59:09 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
小妖女 该用户已被删除
13#
发表于 2015-3-28 03:29:44 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
兰色精灵 该用户已被删除
12#
发表于 2015-3-24 23:37:49 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
若相依 该用户已被删除
11#
发表于 2015-3-17 20:10:16 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
冷月葬花魂 该用户已被删除
10#
发表于 2015-3-11 04:09:17 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
若天明 该用户已被删除
9#
发表于 2015-3-6 10:56:23 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
活着的死人 该用户已被删除
8#
发表于 2015-2-26 10:05:25 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-2-17 22:08:47 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
爱飞 该用户已被删除
6#
发表于 2015-2-11 20:56:00 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
不帅 该用户已被删除
5#
发表于 2015-2-11 06:00:22 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
只想知道 该用户已被删除
地板
发表于 2015-2-8 07:22:09 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
蒙在股里 该用户已被删除
板凳
发表于 2015-2-5 06:50:35 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
柔情似水 该用户已被删除
沙发
 楼主| 发表于 2015-1-22 23:58:34 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
海妖 该用户已被删除
楼主
发表于 2015-1-21 13:22:31 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 11:31

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表