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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 横溢天使 中级黑马   /  2015-9-5 08:27  /  6449 人查看  /  25 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
不知道这是怎么回事,请大神帮忙看看
  1. /*
  2. 在自己的机子上测试UDP的收发功能,但是不知道为什么receive端不可以一直接受send端的代码,只接受一次
  3. */
  4. import java.net.*;
  5. class Send
  6. {
  7.         public static void main(String[] args) throws Exception
  8.         {
  9.                
  10.                 DatagramSocket ds=new DatagramSocket(8888);
  11.                 byte[] buf="abcdef".getBytes();
  12.                 DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.101"),10002);
  13.                 ds.send(dp);
  14.                 ds.close();
  15.                
  16.         }
  17. }
  18. class Receive
  19. {
  20.         public static void main(String[] args) throws Exception
  21.         {
  22.                 DatagramSocket ds=new DatagramSocket(10002);
  23.                 while(true)
  24.                 {
  25.                         byte[] buf=new byte[1024];
  26.                         DatagramPacket dp=new DatagramPacket(buf,buf.length);
  27.                         ds.receive(dp);
  28.                         String ip=dp.getAddress().getHostAddress();
  29.                         String data=new String(dp.getData(),0,dp.getLength());
  30.                         System.out.println(ip+"*******"+data);
  31.                 }
  32.         }
  33. }       
复制代码
异常不知道为什么一直处理不了,这段代码也不知道为什么收端仅仅接受一次发端的代码

QQ截图20150904185910.png (77.8 KB, 下载次数: 92)

QQ截图20150904185910.png

最佳答案

查看完整内容

上面的代码,经测试,收端可以多次接收啊。 我只把代码中的IP地址改成我的IP,其它都没动,你再试试吧。

25 个回复

倒序浏览
上面的代码,经测试,收端可以多次接收啊。
我只把代码中的IP地址改成我的IP,其它都没动,你再试试吧。

re.JPG (160.91 KB, 下载次数: 33)

re.JPG
回复 使用道具 举报
你只发送一次
接受端当然只接受一次

你代码运行没问题, 你为什么会报错..
还有你的 ip.java 是什么
回复 使用道具 举报
本帖最后由 heima_huang 于 2015-9-5 10:06 编辑

首先明确两点:

一、javac编译时,使用到某个类时,去哪找这个类呢?按Classpath环境变量的指引搜索,它会先在Classpath指定的第一个搜索位置下找,看是不是有相应的class文件,如果有就用,如果没有就在这个位置找是不是有相应的.java文件,如果有,编译并使用。如果.java文件也没有,那么去Classpath设置的第二个位置搜索。
二、Classpath环境变量的第一个搜索位置通常是当前目录,就是那个".;"点分号。

明确了这两点,问题就很明白了,
在你的当前目录下,一定有一个BufferedReader.java文件,javac编译中遇到下面这一行代码时:

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

就要用到BufferedReader类了,如上所述,在你有当前目录下找到了BufferedReader.java,于是就编译并使用它,可是编译后发现这个.java文件中不包含类BufferedReader,于是编译就失败了。

解决办法就是:你当前目录下没有BufferedReader.java文件,javac就能在java类库中找到BufferedReader类。

本人经过多次测试,成功复现了这个错误提示:


br.jpg (54.79 KB, 下载次数: 146)

br.jpg

评分

参与人数 1黑马币 +1 收起 理由
横溢天使 + 1 赞一个!

查看全部评分

回复 使用道具 举报
liuch111 发表于 2015-9-5 09:43
你只发送一次
接受端当然只接受一次

ip.java是一个文件名。
上边的代码怎么改才可以实现每次敲回车,接收端每次都就可以收到信息呢?
回复 使用道具 举报
heima_huang 发表于 2015-9-5 10:19
上面的代码,经测试,收端可以多次接收啊。
我只把代码中的IP地址改成我的IP,其它都没动,你再试试吧。 ...

嗯,可是在我的电脑上确实不能像你那样显示,我也不知道为什么
回复 使用道具 举报
横溢天使 发表于 2015-9-5 10:34
嗯,可是在我的电脑上确实不能像你那样显示,我也不知道为什么

我给你回答的关于类的问题,你试了吗?问题解决了吗?
回复 使用道具 举报
只接收了一次数据然后接收端还一直开着
回复 使用道具 举报
heima_huang 发表于 2015-9-5 10:40
我给你回答的关于类的问题,你试了吗?问题解决了吗?

收端仅仅接受一次的问题,你的代码应该是没有问题的。
你可以在ds.send(dp);语句后边加一个输出语句:
System.out.println("Sent");
确定一下,你的信息每次都发出去了吗?
回复 使用道具 举报
heima_huang 发表于 2015-9-5 10:48
收端仅仅接受一次的问题,你的代码应该是没有问题的。
你可以在ds.send(dp);语句后边加一个输出语句:
Sys ...

发出去了,问题成功解决,非常感谢{:2_32:}
回复 使用道具 举报
横溢天使 发表于 2015-9-5 10:55
发出去了,问题成功解决,非常感谢

求悬赏,为了入学,你懂得{:2_30:}
回复 使用道具 举报
heima_huang 发表于 2015-9-5 11:03
求悬赏,为了入学,你懂得

你什么时候入学啊?
回复 使用道具 举报
横溢天使 发表于 2015-9-5 11:05
你什么时候入学啊?

哎呀,正在申请9月16号的课程,技术分远远不够呀~着急呀

点评

你其他步骤都过了?技术分需要多少?面试了吗  发表于 2015-9-5 14:04
回复 使用道具 举报
heima_huang 发表于 2015-9-5 11:07
哎呀,正在申请9月16号的课程,技术分远远不够呀~着急呀

哥给你哥分多
回复 使用道具 举报
后付费的就需要的多了啊
回复 使用道具 举报
发帖,回帖,每天签到,攒技术分就可以!
回复 使用道具 举报
加油!!!!!
回复 使用道具 举报
提示路径错了 呢,classpath看看呢。
回复 使用道具 举报
本帖最后由 lizhichao 于 2015-9-8 16:21 编辑

重新看一遍那个定义把
回复 使用道具 举报
代码是没问题的,可能是你编译的不是这个文件,建议把文件存到其它地方再编译运行
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马