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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wenbaoxing 中级黑马   /  2013-10-26 10:08  /  1109 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wenbaoxing 于 2013-10-28 07:31 编辑
  1. import java.io.*;
  2. import java.net.*;

  3. /*
  4. 第23天的视频中的一个练习
  5. 需求:编写一个聊天的小程序


  6. */

  7. //定义发送端,实现Runnable,覆盖run方法
  8. class Send implements Runnable
  9. {
  10.         private DatagramSocket ds;

  11.         //定义构造函数,发送端一建立,就要有socket对象
  12.         public Send(DatagramSocket ds)
  13.         {
  14.                 this.ds=ds;
  15.         }

  16.         public void run()
  17.         {
  18.                 try
  19.                 {
  20.                         //获取键盘录入
  21.                         BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));

  22.                         String line=null;

  23.                         //在第一次键盘录入的时候,为什么不能输入空呢?我想让下面的while语句第一次的时候line就是空,怎么办?
  24.                         while ((line=bufr.readLine())!=null)
  25.                         {
  26.                                 if("886".equals(line))
  27.                                         break;
  28.                                 byte[] buf=new byte[1024];
  29.                                 buf=line.getBytes();
  30.                                 DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10002);
  31.                                 ds.send(dp);
  32.                         }

  33.                         //将886也发送出去
  34.                         if(line!=null)
  35.                         {
  36.                                 byte[] buf=new byte[1024];
  37.                                 buf=line.getBytes();
  38.                                 DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10002);
  39.                                 ds.send(dp);
  40.                         }                                

  41.                         ds.close();
  42.                 }
  43.                 catch (Exception e)
  44.                 {
  45.                         new RuntimeException("发送端失败!!!");
  46.                 }
  47.         }
  48. }

  49. //定义接收端
  50. class Rece implements Runnable
  51. {
  52.         private DatagramSocket ds;

  53.         public Rece(DatagramSocket ds)
  54.         {
  55.                 this.ds=ds;
  56.         }

  57.         public void run()
  58.         {
  59.                 try
  60.                 {
  61.                         while (true)
  62.                         {
  63.                                 //定义数据包用来接收数据
  64.                                 byte[] buf=new byte[1024];
  65.                                 DatagramPacket dp=new DatagramPacket(buf,buf.length);

  66.                                 //接收数据
  67.                                 ds.receive(dp);

  68.                                 //将数据包拆开,并打印在控制台上
  69.                                 String ip=dp.getAddress().getHostAddress();
  70.                                 String data=new String(dp.getData(),0,dp.getLength());

  71.                                 System.out.println(ip+":"+data);
  72.                         }
  73.                 }
  74.                 catch (Exception e)
  75.                 {
  76.                         new RuntimeException("接收端失败!!!");
  77.                 }
  78.         
  79.         }
  80. }

  81. //测试发送端和接收端
  82. class ChatDemo
  83. {
  84.         public static void main(String[] args) throws Exception
  85.         {
  86.                 DatagramSocket sendDs=new DatagramSocket();
  87.                 DatagramSocket receDs=new DatagramSocket(10002);

  88.                 new Thread(new Send(sendDs)).start();
  89.                 new Thread(new Rece(receDs)).start();


  90.         }
  91. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

倒序浏览
你的疑问是“在第一次键盘录入的时候,为什么不能输入空呢?我想让下面的while语句第一次的时候line就是空,怎么办?”这个吧
你while的循环判断条件里面都判断line!=null,那你怎么怎么为空呢
回复 使用道具 举报
Jim-剣◆﹏ 发表于 2013-10-26 21:01
你的疑问是“在第一次键盘录入的时候,为什么不能输入空呢?我想让下面的while语句第一次的时候line就是空, ...

我是想通过键盘输入来输入null,但是我试了试输入:null,或者直接敲回车,但是都没有读到空
我猜想,应该通过键盘录入无法录入空

但是在后边的视频当中,毕老师提到一句话,在键盘录入的时候,直接按ctrl+c键就是录入了空。
回复 使用道具 举报
To 金牌黑马 2013-10-27 16:15:26
板凳
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马