黑马程序员技术交流社区

标题: 关于老毕二十三天网络编程UDP聊天那里的小疑问 [打印本页]

作者: ☆星痕泪    时间: 2013-11-5 23:08
标题: 关于老毕二十三天网络编程UDP聊天那里的小疑问
本帖最后由 ☆星痕泪 于 2013-11-6 19:11 编辑

我Send继承复写run方法里,当socket 的对象 调用send方法把Packet数据包发送出去,毕老师是在while循环外关闭流。我先没想这个 ,就在catch后加了finally,在这finally里面关闭流,最后导致我在doc里写“886”等结束时没法预料那样关闭,想请高手详细解释一下,灰常感谢!

  1. <P>public void run()
  2.         {
  3.                 try
  4.                 {
  5.                         BufferedReader br =
  6.                                 new BufferedReader(new InputStreamReader(System.in));
  7.                         
  8.                         String line = null;
  9.                         while ((line = br.readLine())!=null)
  10.                         {
  11.                                 if("baibai".equals(line))
  12.                                         break;

  13.                                 byte[] buy = line.getBytes();
  14.                                 DatagramPacket dp =
  15.                                         new DatagramPacket(buy,buy.length,InetAddress.getByName("192.168.0.255"),10001);

  16.                                 ds.send(dp);
  17.                         }
  18.                         
  19.                 }
  20.                 catch (Exception e)
  21.                 {
  22.                         throw new RuntimeException("数据发送异常");
  23.                 }
  24.                 finally
  25.                 {
  26.                         ds.close();
  27.                 }</P>
  28. <P>//补充:程序本身能够运行,我就是像知道有finally和没你finally的区别,在这里。</P>
复制代码

作者: 胡志翔    时间: 2013-11-5 23:23
是不是你的ip地址设置的不对导致接收不到信息?
作者: ☆星痕泪    时间: 2013-11-5 23:28
胡志翔 发表于 2013-11-5 23:23
是不是你的ip地址设置的不对导致接收不到信息?

我测试过了,可以通过,就输入“baibai”这样的关闭没反应。程序关不了。一直阻塞。
作者: 胡志翔    时间: 2013-11-5 23:40
☆星痕泪 发表于 2013-11-5 23:28
我测试过了,可以通过,就输入“baibai”这样的关闭没反应。程序关不了。一直阻塞。 ...

有finally时其中的关闭资源的代码一定被读到,资源无论如何都会关闭。
没有finally时如果出现异常,程序会挂掉,关闭资源的代码读不到,资源不会关闭。
作者: 黄炳期    时间: 2013-11-6 08:53
如果问题已经解决,请及时修改主题为“提问结束”。
作者: The_Wizard    时间: 2013-11-6 16:55
不知道你是不是没有将 baibai 写成单独的一行?readLine是每次读取一行的数据。
作者: ☆星痕泪    时间: 2013-11-6 19:10
黄炳期 发表于 2013-11-6 08:53
如果问题已经解决,请及时修改主题为“提问结束”。

不好意思,晚上题的问,现在下班刚回来




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