Java语言是怎样跨平台性运行的呢

Java语言是怎样跨平台性运行的呢,第1张

Java之所以能跨平台,是因为java虚拟机能跨平台。

因为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) {

}

}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8276953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存