黑马程序员技术交流社区

标题: 关于网络编程本地IP地址的问题 [打印本页]

作者: YongBao_Summer    时间: 2015-6-1 17:47
标题: 关于网络编程本地IP地址的问题
本帖最后由 YongBao_Summer 于 2015-6-1 17:57 编辑

如下是我写的一个UDP协议的发送线程类。
在学习的过程中,开始时,我按照视频中毕向东老师使用的192.168.1.254或者192.168.1.255作为InetAddress的参数传递,但是接收端并没有接受到数据,后来我改为127.0.0.1,发现还是不能传送过来,于是我使用LocalHost作为参数,发现能够成功。但是当我在命令行使用ipconfig查找自己的IPV4地址时,发现是10.10.10.105,我将其作为参数,发现依然不可以。导致我不能明白,为什么我直接用我查找到的本机Ip不能够成功,以及192.168.1.254为什么不能收到?(我用的无线网络,win7 x64环境,Ip与DNS皆选择的自动获取,不知道有没有影响,可能这是一个简单的问题,但是我好像陷入其中了,好困惑~求前辈们解救:dizzy:)
class UdpSer implements Runnable {
        private DatagramSocket ds;
        private DatagramPacket dp;
        private byte[] buf;
        public UdpSer(DatagramSocket socket) {
                this.ds = socket;
        }

        public void run() {
                try {
                        while (true) {
                                ds = new DatagramSocket();
                                buf = "aaaaaaaaa".getBytes();
                                // dp = new DatagramPacket(buf, buf.length,
                                // InetAddress.getLocalHost(), 10002);
                                dp = new DatagramPacket(buf, buf.length,
                                                InetAddress.getByName("LocalHost"), 10002);
//                                System.out.println(ds.getLocalAddress().getHostAddress()+"----\n"+
//                                                ds.getLocalAddress().getHostName()+"----\n"+
//                                                dp.getAddress()+"**\n"+dp.getPort());
//                                 dp = new DatagramPacket(buf, buf.length,
//                                                InetAddress.getByName("127.0.0.1"), 1002);
                                ds.send(dp);
                                System.out.println("服务器发送完毕------------------->");
                                Thread.sleep(3000);
                        }
                } catch (Exception e) {
                        System.out.println("服务器挂掉了....");
                } finally {
                        if (ds != null)
                                ds.close();
                }
        }
}


作者: rexih    时间: 2015-6-1 17:47
没看到接收端的代码,我用127.0.01是可以的

ds = new DatagramSocket();//这里添加个端口试试比如10001
你代码里dp包的目的地是10002,记得接收端线程里面定义DatagramSocket一定要写10002

如果还有问题把hosts文件打开看看是不是有奇怪的更改
C:\Windows\System32\drivers\etc\hosts,用记事本就能打开

作者: YongBao_Summer    时间: 2015-6-1 19:05
rexih 发表于 2015-6-1 18:50
没看到接收端的代码,我用127.0.01是可以的

ds = new DatagramSocket();//这里添加个端口试试比如10001

粗心了。端口号少写一个0~   好丢脸。用ipconfig在命令行得到的Ip地址也是可以用的。真伤心
作者: 小麻    时间: 2015-6-1 22:55
           学习下
作者: 空白心    时间: 2015-6-18 01:13
学习下 增加 异常经验!!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2