A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李辉 中级黑马   /  2013-3-11 15:04  /  1428 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有两个问题: 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()操作不是已经释放资源了吗?为什么端口还在占用? 莫非是老师说错了,实际应该是重新运行时系统又随机分配一个端口,恰好和之前不一样而已。 求真相!!!

点评

发帖时写代码时请使用代码模版  发表于 2013-3-11 15:14

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

3 个回复

倒序浏览
问题一:public void receive(DatagramPacket p)
             throws IOException从此套接字接收数据报包。当此方法返回时,DatagramPacket 的缓冲区填充了接收的数据。数据报包也包含发送方的 IP 地址和发送方机器上的端口号。
此方法在接收到数据报前一直阻塞。数据报包对象的 length 字段包含所接收信息的长度。如果信息比包的长度长,该信息将被截短。
问题二,求解答。

回复 使用道具 举报
问题2,毕老师视频上也说过,端口不会马上释放的,要隔一段时间,你试下close后1小时再运行会不会再占用。
回复 使用道具 举报
问题二:ds.close()是关闭了释放资源,但是由于可能是内存中有一定的缓存区域,还没有完全释放完的。还处于wait_time状态,过段时间后才可以完全释放。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马