A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吃阁子的猫 中级黑马   /  2013-8-14 19:46  /  1085 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吃阁子的猫 于 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有什么区别?

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

6 个回复

正序浏览
柳小龙 发表于 2013-8-15 11:11
一个是计算机全名,一个是计算机ip地址,效果是一样的,如果联网的话,ip地址是不固定的,写计算机全名比较 ...

好的,谢谢
回复 使用道具 举报
一个是计算机全名,一个是计算机ip地址,效果是一样的,如果联网的话,ip地址是不固定的,写计算机全名比较好,这样不需要反复修改ip地址。
如果不成功可能是你的计算机全名不正确,或者计算机端口已被绑定而占用。你在试试。
回复 使用道具 举报
柳小龙 发表于 2013-8-14 23:48
亲,你把1-pc改成127.0.0.1,默认也是和本地计算机绑定。。结果运行正确,没啥问题。。启动的时候先启动接 ...

恩恩,这样改有什么区别的?我想知道我的为什么不可以
回复 使用道具 举报
亲,你把1-pc改成127.0.0.1,默认也是和本地计算机绑定。。结果运行正确,没啥问题。。启动的时候先启动接收端程序,再启动发送端程序并发送消息。。
回复 使用道具 举报
柳小龙 发表于 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);
                }
        }

}
就是打印不出来
回复 使用道具 举报
亲,DatagramSocket是多点通信,你的程序只是接收端的程序,再写个发送端程序,数据报DatagramPacket 中包含的ip信息是来自发送数据包的一端的!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马