黑马程序员技术交流社区

标题: 关于网络编程while循环... [打印本页]

作者: 朴日男    时间: 2014-10-4 20:12
标题: 关于网络编程while循环...
本帖最后由 朴日男 于 2014-10-5 04:58 编辑
  1. import java.net.*;
  2. import java.io.*;
  3. /*
  4. 编写一个聊天程序.
  5. 有收数据的部分,和发数据的部分.
  6. 这两部分需要同时执行.
  7. 那就需要用到多线程技术.
  8. 一个线程控制收,一个线程控制发.
  9. 因为收和发 动作是不一致的,所以要定义两个run方法.
  10. 而且这两个方法要封装到不同的类中.
  11. */
  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.            <font color="#ff0000"> </font>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("192.168.1.255"),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<font color="#ff0000"> </font>
  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. }

复制代码



作者: 水竹    时间: 2014-10-4 20:19
你IO和异常处理的视频都没看过么?
作者: 朴日男    时间: 2014-10-4 21:56
水竹 发表于 2014-10-4 20:19
你IO和异常处理的视频都没看过么?

-0 - 没见过, try和RuntimeException 组合使用...而且 RuntimeException 不是不用 throws么? 所以才问的 - -
IO刚开始看, 为了测试题, 直接看的网络编程...等把Test 提交之后接着回来看...不好意思...
作者: 水竹    时间: 2014-10-4 21:58
朴日男 发表于 2014-10-4 21:56
-0 - 没见过, try和RuntimeException 组合使用...而且 RuntimeException 不是不用 throws么? 所以才问的  ...

我现在在做入学考试那个题,和基础测试一样是十道题,里面一道网络的都没有,IO的到是考了好几个……




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