黑马程序员技术交流社区

标题: 关于网络编程UDP协议问题,请指教 [打印本页]

作者: 再见亦是泪    时间: 2013-1-22 08:55
标题: 关于网络编程UDP协议问题,请指教
本帖最后由 张向辉 于 2013-1-22 20:15 编辑

发送端
/**
*
*/
package cn.soft;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
* @author pc-fei
*
*/
public class UdpSendDemo {

        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {

                System.out.println("发送启动");
                DatagramSocket ds=new DatagramSocket();
                String str="我来了";
                byte[] buf=str.getBytes();
                DatagramPacket dp=new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.2"), 10000);
                ds.send(dp);
                ds.close();
        }

}
接收端
/**
*
*/
package cn.soft;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
* @author pc-fei
*
*/
public class UpdReceDemo {

        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {

                System.out.println("接收启动");
                DatagramSocket datagramSocket=new DatagramSocket(10000);
                byte[] buf=new byte[1024];
                DatagramPacket datagramPacket=new DatagramPacket(buf, buf.length);
                datagramSocket.receive(datagramPacket);
                String ip=datagramPacket.getAddress().getHostAddress();
                int port=datagramPacket.getPort();
                String text=new String(datagramPacket.getData(),0,datagramPacket.getLength());
                System.out.println(ip+":"+port+":"+text);
                datagramSocket.close();
        }

}
我这样写然后运行就报错,接收端显示异常
接收启动
Exception in thread "main" java.net.SocketException: Unrecognized Windows Sockets error: 0: Cannot bind
        at java.net.PlainDatagramSocketImpl.bind0(Native Method)
        at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:82)
        at java.net.DatagramSocket.bind(DatagramSocket.java:368)
        at java.net.DatagramSocket.<init>(DatagramSocket.java:210)
        at java.net.DatagramSocket.<init>(DatagramSocket.java:261)
        at java.net.DatagramSocket.<init>(DatagramSocket.java:234)
        at cn.soft.UpdReceDemo.main(UpdReceDemo.java:23)
请同学们帮忙解决下 看哪里出错了
作者: yong230    时间: 2013-1-22 09:04
注意DatagramPacket dp=new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.2"), 10000);
这句中的ip地址是你本机的ip地址吗
作者: 朱宏青    时间: 2013-1-22 09:08
端口被占用了

不要用10000 换一个试试
作者: yong230    时间: 2013-1-22 09:08
你写的代码没问题。我用你的代码在我本机上运行,就把ip地址换成我本机的ip地址运行正常
作者: 再见亦是泪    时间: 2013-1-22 09:26
没错呀 是我本机的IP
作者: 再见亦是泪    时间: 2013-1-22 09:26
yong230 发表于 2013-1-22 09:08
你写的代码没问题。我用你的代码在我本机上运行,就把ip地址换成我本机的ip地址运行正常 ...

是我机机的IP
作者: 再见亦是泪    时间: 2013-1-22 09:30
再见亦是泪 发表于 2013-1-22 09:26
是我机机的IP

会不会是我没连接网线 没有本地连接的原因
作者: yong230    时间: 2013-1-22 09:32
那就有可能是1000端口被占用,在cmd中用网络命令netstat -ano 回车查看一下有没有进程占用1000端口,有的话换个没被占用的端口试试
作者: Rancho_Gump    时间: 2013-1-22 20:14
你的程序 我在我的机子上运行了下 没问题    英文不行,错误信息看不懂啊  建议你自己好好再调试下。  其实对于程序BUG自己调试收获会更大




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