有两个问题: 1.毕老师第23天的例子中,老师做了两个程序,一个负责发送,一个负责接收,那这两个程序肯定是用的一个jre,问题是当jre运行两个java程序时,一个程序如果结束了,另一个程序还没运行完,虚拟机不会停止(我用下面的例子测试过了),这种情况跟多线程有关系吗?
import java.net.*;
class SocketSend
{
public static void main(String[] args)throws Exception
{
DatagramSocket ds=new DatagramSocket();
byte[] bt="hello world".getBytes();
DatagramPacket dp=new DatagramPacket(bt,bt.length,InetAddress.getLocalHost(),10000);
for (int i=0;i<10 ;i++ )
{
ds.send(dp);
}
ds.close();
}
}
class SocketReceive
{
public static void main(String[] args) throws Exception
{
DatagramSocket ds=new DatagramSocket(10000);
byte[] bt=new byte[1024];
DatagramPacket dp=new DatagramPacket(bt,bt.length);
for ( int i=0;i<50 ;i++ )
{
ds.receive(dp);
String ip=dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
int port=dp.getPort();
System.out.println(ip+"::"+data+"::"+port);
}
ds.close();
}
}
问题2: 毕老师在演示这个程序时,每次测试发送方用的端口都不一样,他解释说之前用的端口还在占用,可是我想ds.close()操作不是已经释放资源了吗?为什么端口还在占用? 莫非是老师说错了,实际应该是重新运行时系统又随机分配一个端口,恰好和之前不一样而已。 求真相!!! |