因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码。然后不同的硬件平台上安装有不同的Java虚拟机(JVM),由JVM来把字节码再“樱消翻译”成所对应的硬件平台能够执行的代码。因此对于Java编程者来说,不需要考虑硬件平台是什么。所以Java可以跨平台。
因为它有虚拟机(JVM),JAVA程序不是直接在电脑上运行的,是在虚拟机上进行的,每个系统平台都是有自己的虚拟机(JVM),所以JAVA语言能跨平台。
java代码不是直接运行在CPU上,而是运行在java虚机(简称JVM)上的。
java是先把java文件编译成二进制字节码的class文件,jvm就解释执行class文件。
就是因脊返知为java是运行在jvm上的,所以它的代码就能不经修改,就能在不同平台的jvm上运行(在UNIX用UNIX的jvm,在linux上用linux的jvm,在windows上用windows的jvm)
假如用windows移植到UNIX,只需把java文件是UNIX的jvm上编译成class文件,然后用jvm运世拍行就可以了.
编辑一个java组播应用程序的过程如下1. 创建一个用于发送和接收的MulticastSocket组播套接字对象
2. 创建一个指定缓冲区大小及组播地址和端口的DatagramPacket组播数据包对象
3. 使用组播套接字joinGroup(),将其加入到一个组播
4. 使用组播套接字的send()方法,将组播数据包对象放入其中,发送组播数据包.
或者
使用组播套接字的receive()方法,将组播数据包对象放入其中,接收组播数据包
5. 解码组播数据包提取信息,并依据得到的信息作出响应String s = new String(dp.getData(), 0, dp.getLength())
6. 重复过程4和5,即在while循环中实现。
7. 使用组播套接字的leaveGroup()方法,离开组播组;关闭组播套接字
接收组播数据包程序:
Java代码
public class MulticastReceived {
public static void main(String[] args) throws Exception {
InetAddress group = InetAddress.getByName("224.0.0.4")// 组播地址
int port = 4006// 端口
MulticastSocket msr = null
try {
msr = new MulticastSocket(port)// 1.创建一个用于发送和接收的MulticastSocket组播套接字对象
msr.joinGroup(group)// 3.使用组播套接字joinGroup(),将其加入到一个组播
byte[] buffer = new byte[8192]
System.out.println("接收数据包启动!(启动时间:)" + new java.util.Date() + ")")
while (true) {
DatagramPacket dp = new DatagramPacket(buffer, buffer.length)// 2.创建一个指定缓冲区大小及组播地址和端口的DatagramPacket组播数据包对象
msr.receive(dp)// 4.使用组播套接字的receive()方法,将组播数据包对象放入谈州其中,接收组播数据包
String s = new String(dp.getData(), 0, dp.getLength())// 5.解码组播数据包提取信息,并依据得到的信息作出响应
System.out.println(s)
}
} catch (IOException e) {
e.printStackTrace()
} finally {
if (msr != null) {
try {
msr.leaveGroup(group)// 7.使用组播套接字的leaveGroup()方法,离开组播组
msr.close()// 关含掘蔽闭组播套接字
} catch (IOException e) {
}
}
}
}
}
发送组播散信数据包程序:
Java代码
public class MulticastSender {
public static void main(String[] args) throws Exception {
InetAddress group = InetAddress.getByName("224.0.0.1")// 组播地址
int port = 4000// 端口
MulticastSocket mss = null
try {
mss = new MulticastSocket(port)// 1.创建一个用于发送和接收的MulticastSocket组播套接字对象
mss.joinGroup(group)// 3.使用组播套接字joinGroup(),将其加入到一个组播
byte[] buffer = new byte[8192]
System.out.println("接收数据包启动!(启动时间:)" + new java.util.Date() + ")")
while (true) {
String message = "Hello" + new java.util.Date()
byte[] buffer2 = message.getBytes()// 2.创建一个指定缓冲区大小及组播地址和端口的DatagramPacket组播数据包对象
DatagramPacket dp = new DatagramPacket(buffer, buffer.length, group, port)
// msr.receive(dp)//接收组播数据包
mss.send(dp)// 4.使用组播套接字的send()方法,将组播数据包对象放入其中,发送组播数据包
// String s = new String(dp.getData(), 0, dp.getLength())//5.解码组播数据包提取信息,并依据得到的信息作出响应
System.out.println("发送数据包给" + group + ":" + port)
Thread.sleep(1000)
}
} catch (IOException e) {
e.printStackTrace()
} finally {
if (mss != null) {
try {
mss.leaveGroup(group)// 7.使用组播套接字的leaveGroup()方法,离开组播组
mss.close()// 关闭组播套接字
} catch (IOException e) {
}
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)