黑马程序员技术交流社区

标题: 关于UDP聊天 [打印本页]

作者: 蓝迪    时间: 2012-9-6 23:39
标题: 关于UDP聊天
本帖最后由 蓝迪 于 2012-9-7 11:21 编辑
  1. /*
  2. 编写一个聊天程序
  3. 有收数据的部分,和发数据的部分
  4. 这两部分需要同时执行
  5. 那就需要用到多线程技术
  6. 一个线程控制收,一个线程控制发

  7. 因为收和发动作是不一致的,所以要定义两个run方法
  8. 而且这两个方法要封装到不同的类中
  9. */
  10. import java.net.*;
  11. import java.io.*;
  12. class Send implements Runnable
  13. {
  14.      private DatagramSocket ds;
  15.      public Send(DatagramSocket ds)
  16.      {
  17.           this.ds = ds;
  18.      }
  19.      public void run()
  20.      {
  21.           try
  22.           {
  23.                BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  24.                String line = null;

  25.                while ((line = bufr.readLine())!=null)
  26.                {
  27.                     if("886".equals(line))
  28.                          break;
  29.                     byte[] buf = line.getBytes();
  30.                     DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName<FONT color=red>("127.0.0.255"),</FONT>10002);
  31.                     ds.send(dp);
  32.                }

  33.           }
  34.           catch (Exception e)
  35.           {
  36.                throw new RuntimeException("发送端失败");
  37.           }

  38.      }
  39. }

  40. class Rece implements Runnable
  41. {
  42.      private DatagramSocket ds;
  43.      public Rece(DatagramSocket ds)
  44.      {
  45.           this.ds = ds;
  46.      }
  47.      public void run()
  48.      {
  49.           try
  50.           {
  51.                while(true)
  52.                {
  53.                     byte[] buf = new byte[1024];
  54.                     DatagramPacket dp = new DatagramPacket(buf,buf.length);
  55.                     ds.receive(dp);
  56.                     String ip = dp.getAddress().getHostAddress();
  57.                     String data = new String(dp.getData(),0,dp.getLength());
  58.                     System.out.println(ip+"::"+data);
  59.                }
  60.           }
  61.           catch (Exception e)
  62.           {
  63.                throw new RuntimeException("发送端失败");
  64.           }
  65.      }
  66. }

  67. class chatDemo
  68. {
  69.      public static void main(String[] args) throws Exception
  70.      {
  71.           DatagramSocket sendSocket = new DatagramSocket();
  72.           DatagramSocket receSocket = new DatagramSocket(10002);

  73.           new Thread(new Send(sendSocket)).start();
  74.           new Thread(new Rece(receSocket)).start();

  75.      }
  76. }
复制代码
看来毕老师的视频,我照着打了一遍,然后运行,发现了一个问题
就是红体字那,写的不是广播地址 255吗  
然后我运行程序,输出端接收到的输入端的地址竟然不想毕老师那样的本机地址192.168.1.254,而是我输入的127.0.0.255
如图


这是为什么呢?
作者: 庄星睿    时间: 2012-9-7 00:33
127.0.0.255和127.0.0.1一样都是你本机的回环地址,直接简写127.1和127.255都没问题的




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