lchi1997 2018-02-27 16:58 采纳率: 41.7%
浏览 946
已结题

DatagramSocket为什么会bad address

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

public class DatagramClient {  
        public static void main(String args[]){  
            String host="localhost";  
            if(args.length==1)  
                host=args[0];  
            DatagramPacket dgp1;  
            DatagramSocket s=null;  
            try{  
                s=new DatagramSocket();  
                byte []buffer;//用来存储发送的数据  
                buffer=new String("hello").getBytes();//字符串转化数组  
                //将主机名转变为InetAddress类对象,此对象存储有ip对象和地址  
                InetAddress ia=InetAddress.getByName(host);  
                //创建一个DatagramPacket对象来封装字节数组的指针以及目标地址信息,目标地址包含了ip和端口号  

                DatagramPacket dgp=new DatagramPacket(buffer,buffer.length,ia,10000);  
                s.send(dgp);  
                byte []buffer2=new byte[50];  
                //创建一个对象来封装返回来的数据  
                dgp1=new DatagramPacket(buffer2,buffer.length,ia,10000);  
                s.receive(dgp1);  
                System.out.println("server:"+new String(dgp1.getData()));  
            }  
            catch(IOException e){  
                System.out.println(e.toString());  
            }  
            finally{  
                if(s!=null)  
                 s.close();       
            }  
        }  
}  

java.net.SocketException: Bad address: Cannot bind
代码网上直接复制的,这个应该是s=new DatagramSocket();抛出的
这份代码在其他机器上可以运行,在我的电脑上不能运行,把windows防火墙关掉仍然不行
试了下其他的构造函数 想要绑定别的电脑的端口也不行

  • 写回答

2条回答 默认 最新

  • 请战 2018-02-28 01:37
    关注

    你在new一个DatagramSocket的时候绑定下端口号试试
    s=new DatagramSocket(10000);

    评论

报告相同问题?