import java.net.*;
class UdpSend
{
public static void main(String[] args) throws Exception
{
//建立连接
DatagramSocket ds=new DatagramSocket();
//提供数据
byte[] buf="我来了".getBytes();
DatagramPacket dp=
new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.1"),10000);

//发送数据
ds.send(dp);
//关闭资源
ds.close();
System.out.println(buf);
}
}
//import java.net.*;
class UdpRece
{
public static void main(String[] args) throws Exception
{
//创建端口,监听端口
DatagramSocket ds=new DatagramSocket(10000);
//定义存储数据报
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
//存储数据
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="+ip+"::"+data+"port::"+port);
//关闭资源
ds.close(); }
}
异常为:Exception in thread "main" java.net.BindException: Address already in use: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:91)
at java.net.DatagramSocket.bind(DatagramSocket.java:372)
at java.net.DatagramSocket.<init>(DatagramSocket.java:211)
at java.net.DatagramSocket.<init>(DatagramSocket.java:262)
at java.net.DatagramSocket.<init>(DatagramSocket.java:235)
at UdpRece.main(UdpRece.java:7)

解决方案 »

  1.   

    BindException 俗称: 端口绑定异常  你这个10000端口现在已经被占用了
      

  2.   

    我测了你的代码, 正常。 先执行UdpRece,再运行UdpSend。1, 发报、收报的端口确保一致, 192.168.0.1 我采用的是本地IP: 127.0.0.1 。
    2, UdpRece 运行后不会马上退出 ,一直会等待,所以检查下是不是有之前未退出的UdpRece 占用了 端口。
      

  3.   

    如果改了没用,且该端口仍报此错,说明端口仍被占用
    扫描端口,验证一下
    netstat -an