黑马程序员技术交流社区

标题: 不能打印ip和端口 [打印本页]

作者: 吃阁子的猫    时间: 2013-8-14 19:46
标题: 不能打印ip和端口
本帖最后由 吃阁子的猫 于 2013-8-15 14:55 编辑

接收端
public class Receiver {
/**
  * @param args
  * @throws Exception
  */
public static void main(String[] args) throws Exception {
  //创建DatagramSocket,绑定本机端口和地址
  DatagramSocket socket = new DatagramSocket(20000,InetAddress.getByName("1-pc"));
  //创建DatagramPacket,接收数据
  DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
  //接收
  while(true){
  socket.receive(packet);
  //关闭

  //获取收到的数据
  byte[] buf = packet.getData();
  int length = packet.getLength();
  String s =  new String(buf,0,length);
  
  String ip = packet.getAddress().getHostAddress();
  int port = packet.getPort();
  System.out.println(ip+":"+port);
  System.out.println(s);
  
  }
}
}
为什么接收后不显示对方的ip和端口?
还有getHostAddress()和getHostName有什么区别?


作者: 柳小龙    时间: 2013-8-14 22:55
亲,DatagramSocket是多点通信,你的程序只是接收端的程序,再写个发送端程序,数据报DatagramPacket 中包含的ip信息是来自发送数据包的一端的!!!
作者: 吃阁子的猫    时间: 2013-8-14 23:24
柳小龙 发表于 2013-8-14 22:55
亲,DatagramSocket是多点通信,你的程序只是接收端的程序,再写个发送端程序,数据报DatagramPacket 中包 ...

我有发送端,没写出来,补上
public class Sender {

        /**
         * @param args
         * @throws Exception
         * @throws SocketException
         */
        public static void main(String[] args) throws SocketException, Exception {
                Scanner sc = new Scanner(System.in);
                DatagramSocket socket = new DatagramSocket();

                while(true){
                String s = sc.nextLine();
                //创建DatagramSocket,绑定本机端口和地址
                //创建DatagramPacket,指定数据,长度,对方的IP和端口
                DatagramPacket packet = new DatagramPacket(s.getBytes(), s.getBytes().length, InetAddress.getByName("1-pc"), 20000);
                //发送出去
                socket.send(packet);
                }
        }

}
就是打印不出来
作者: 柳小龙    时间: 2013-8-14 23:48
亲,你把1-pc改成127.0.0.1,默认也是和本地计算机绑定。。结果运行正确,没啥问题。。启动的时候先启动接收端程序,再启动发送端程序并发送消息。。
作者: 吃阁子的猫    时间: 2013-8-15 07:52
柳小龙 发表于 2013-8-14 23:48
亲,你把1-pc改成127.0.0.1,默认也是和本地计算机绑定。。结果运行正确,没啥问题。。启动的时候先启动接 ...

恩恩,这样改有什么区别的?我想知道我的为什么不可以
作者: 柳小龙    时间: 2013-8-15 11:11
一个是计算机全名,一个是计算机ip地址,效果是一样的,如果联网的话,ip地址是不固定的,写计算机全名比较好,这样不需要反复修改ip地址。
如果不成功可能是你的计算机全名不正确,或者计算机端口已被绑定而占用。你在试试。
作者: 吃阁子的猫    时间: 2013-8-15 14:54
柳小龙 发表于 2013-8-15 11:11
一个是计算机全名,一个是计算机ip地址,效果是一样的,如果联网的话,ip地址是不固定的,写计算机全名比较 ...

好的,谢谢




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