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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄兴旺 金牌黑马   /  2013-8-2 16:05  /  2001 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄兴旺 于 2013-8-2 22:58 编辑
  1. import java.io.*;
  2. import java.net.*;
  3. class Send implements Runnable
  4. {
  5.         private DatagramSocket ds;
  6.         public Send(DatagramSocket ds)
  7.         {
  8.                 this.ds = ds;
  9.         }
  10.         public void run()
  11.         {
  12.                 try
  13.                 {
  14.                         BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

  15.                         String line = null;                        while((line=bufr.readLine())!=null)
  16.                         {                        

  17.                                 byte[] buf = line.getBytes();
  18.                                 DatagramPacket dp =
  19.                                 new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10002);
  20.                                 ds.send(dp);

  21.                                 if("886".equals(line))
  22.                                         break;
  23.                         }
  24.                 }
  25.                 catch (Exception e)
  26.                 {
  27.                         throw new RuntimeException("发送端失败");
  28.                 }
  29.         }
  30. }

  31. class Rece implements Runnable
  32. {

  33.         private DatagramSocket ds;
  34.         public Rece(DatagramSocket ds)
  35.         {
  36.                 this.ds = ds;
  37.         }
  38.         public void run()
  39.         {
  40.                 try
  41.                 {
  42.                         while(true)
  43.                         {
  44.                                 byte[] buf = new byte[1024];
  45.                                 DatagramPacket dp = new DatagramPacket(buf,buf.length);

  46.                                 ds.receive(dp);
  47.                                 String ip = dp.getAddress().getHostAddress();

  48.                                 String data = new String(dp.getData(),0,dp.getLength());

  49.                                 if("886".equals(data))
  50.                                 {                                        System.out.println(ip+"....离开聊天室");
  51.                                         break;
  52.                                 }                        System.out.println(ip+":"+data);
  53.                         }
  54.                 }
  55.                 catch (Exception e)
  56.                 {
  57.                         throw new RuntimeException("接收端失败");
  58.                 }
  59.         }
  60. }
  61. class  ChatDemo
  62. {
  63.         public static void main(String[] args) throws Exception
  64.         {
  65.                 DatagramSocket sendSocket = new DatagramSocket();
  66.                 DatagramSocket receSocket = new DatagramSocket(10002);

  67.                 new Thread(new Send(sendSocket)).start();
  68.                 new Thread(new Rece(receSocket)).start();
  69.         }
  70. }
复制代码
求大神解答下。

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

4 个回复

倒序浏览
Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。

设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread 类实现了 Runnable。激活的意思是说某个线程已启动并且尚未停止。

此外,Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个 Thread 实例并将自身作为运行目标,就可以运行实现 Runnable 的类而无需创建 Thread 的子类。大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。

run() 方法: 使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
实现这个接口就是实现run方法,我估计你是和继承Tread类有点混吧 。

Ticket t = new Ticket();

直接创建Ticket对象,并不是创建线程对象。
因为创建对象只能通过new Thread类,或者new Thread类的子类才可以。
所以最终想要创建线程。既然没有了Thread类的子类,就只能用Thread类。

Thread t1 = new Thread(t); //创建线程。

只要将t作为Thread类的构造函数的实际参数传入即可完成线程对象和t之间的关联
为什么要将t传给Thread类的构造函数呢?其实就是为了明确线程要运行的代码run方法。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
crazy_primitive 发表于 2013-8-2 16:29
Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。
...

谢谢。。
回复 使用道具 举报
诸隆隆 发表于 2013-8-2 18:16
实现这个接口就是实现run方法,我估计你是和继承Tread类有点混吧 。

Ticket t = new Ticket();

谢谢。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马