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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王晓州 中级黑马   /  2012-11-1 22:14  /  1568 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 werewolf 于 2012-11-1 22:47 编辑

[ 本帖最后由 werewolf 于 2012-11-1 22:21 编辑 ]\n\n[ 本帖最后由 werewolf 于 2012-11-1 22:20 编辑 ]\n\n
  1. import java.io.*;
  2. import java.net.*;
  3. class  Send2
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                
  8.                         DatagramSocket ds = new DatagramSocket(8888);
  9.                         while (true)
  10.                         {
  11.                                 byte [] buf = new byte[1024];
  12.                                 BufferedReader bufr =
  13.                                         new BufferedReader(new InputStreamReader(System.in));
  14.                                 
  15.                                 buf = bufr.readLine().getBytes();//不知道这几句有什么问题
  16.                                 if ("886".equals(bufr.readLine()))//总是读取两次才发送。
  17.                                           break;


  18.                                 DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.137.255"),10000);

  19.                                 ds.send(dp);
  20.                         }
  21.                         
  22.                         ds.close();
  23.                
  24.                
  25.                
  26.                
  27.         }
  28. }

  29. class Receive2
  30. {
  31.         public static void main (String [] args) throws Exception
  32.         {
  33.                 DatagramSocket ds = new DatagramSocket(10000);
  34.                 while (true)
  35.                 {
  36.                         
  37.                         byte [] buf = new byte[1024];
  38.                         DatagramPacket dp = new DatagramPacket(buf,buf.length);
  39.                         ds.receive(dp);
  40.                         String data = new String (dp.getData(),0,dp.getLength());
  41.                         String ip = dp.getAddress().getHostAddress();
  42.                         int port = dp.getPort();
  43.                         System.out.println(ip+"::"+data+"::"+port);
  44.                 }
  45.                

  46.                
  47.         }
  48. }
复制代码

360截图20121101220209853.jpg (38.36 KB, 下载次数: 32)

360截图20121101220209853.jpg

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

5 个回复

倒序浏览
if ("886".equals(bufr.readLine()))这行代码的问题 ,因为在此之前你己经使用调用过一次readLine()方法读取过一行数据,接着这个if语句又读取了一行数据,而这行数据没被你加到DatagramPacket 包对象里,当然,发送数据是只会发送你第一次输入的值(两行数据,仅会输出前一行),只写一行数据时,在if语句调用readLine方法时,因为没有数据,会被阻塞,只有输入第二行数据时,此时第一行的数据才会被发送出去,代码修改如:
  1. String line = bufr.readLine();

  2.                  if ("886".equals(line))
  3.                          break;
  4.                  line.getBytes();
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
付维翔 发表于 2012-11-1 22:37
if ("886".equals(bufr.readLine()))这行代码的问题 ,因为在此之前你己经使用调用过一次readLine()方法 ...

谢谢!
看来我前面的基础还是不够扎实啊!
回复 使用道具 举报
付维翔 发表于 2012-11-1 22:37
if ("886".equals(bufr.readLine()))这行代码的问题 ,因为在此之前你己经使用调用过一次readLine()方法 ...

谢谢!
看来我前面的基础还是不够扎实啊!
回复 使用道具 举报
付维翔 发表于 2012-11-1 22:37
if ("886".equals(bufr.readLine()))这行代码的问题 ,因为在此之前你己经使用调用过一次readLine()方法 ...

谢谢!
看来我前面的基础还是不行啊!
继续努力啦。
回复 使用道具 举报
werewolf 发表于 2012-11-1 22:45
谢谢!
看来我前面的基础还是不行啊!
继续努力啦。

不客气,大家共同努力,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马