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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王桂丽 中级黑马   /  2012-8-24 21:53  /  1579 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
编写一个聊天程序
有收数据的部分,和发数据的部分。
这两个部分需要同时执行。
那就需要用到多线程技术。
一个线程控制收,一个线程控制发。
因为收和发动作是不一致的,所以要定义两个run方法。
而且这两个方法要封装到不同的类中。
*/
import java.io.*;
import java.net.*;
class Send implements Runnable
{
private DatagramSocket ds;
private Send(DatagramSocket ds)
{
  this.ds=ds;
}
public void run()
{
  try
  {
   BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
   String line=null;
   while((line=bufr.readLine())!=null)
   {
    if ("886".equals(line))
     break;
    byte[]buf=line.getBytes();
    DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.3"),10003);
   }
   
  }
  catch (Exception e)
  {
   throw new RuntimeException("发送端失败");
  }
}
}
class Rece implements Runnable
{
private DatagramSocket ds;
private Rece(DatagramSocket ds)
{
  this.ds=ds;
}
public void run()
{
  try
  {
   while(true)
   {
    byte[]buf=new byte[1024];
    DatagramPacket dp=new DatagramPacket(buf,buf.length);
    ds.receive(dp);
    String ip=dp.getAddress().getHostAddress();
    String data=new String(dp.getData(),0,dp.getLength());
    System.out.println(ip+":"+data);
   }
  }
  catch (Exception e)
  {
   throw new RuntimeException("接收失败");
  }
}
}
class  ChatDemo
{
public static void main(String[] args) throws Exception
{
  DatagramSocket sendSocket=new DatagramSocket();
  DatagramSocket receSocket=new DatagramSocket(10002);
  new Thread(new Send(sendSocket)).start();
  new Thread(new Rece(receSocket)).start();
  //System.out.println("Hello World!");
}
}


疑问:编译提示:“Send(java.net.DatagramSocket)可以在Send中访问new Thread(new Send(sendSocket)).start()”是什么意思?应该怎么修改

未命名.jpg (21.01 KB, 下载次数: 4)

未命名.jpg

评分

参与人数 1黑马币 +30 收起 理由
田建 + 30 要细心啊,构造函数私有,数据没有send();.

查看全部评分

2 个回复

倒序浏览
  1. package com.gaga.test1;


  2. /*
  3. 编写一个聊天程序
  4. 有收数据的部分,和发数据的部分。
  5. 这两个部分需要同时执行。
  6. 那就需要用到多线程技术。
  7. 一个线程控制收,一个线程控制发。
  8. 因为收和发动作是不一致的,所以要定义两个run方法。
  9. 而且这两个方法要封装到不同的类中。
  10. */
  11. import java.io.*;
  12. import java.net.*;
  13. class Send implements Runnable
  14. {
  15. private DatagramSocket ds;
  16. Send(DatagramSocket ds)
  17. {
  18.   this.ds=ds;
  19. }
  20. public void run()
  21. {
  22.   try
  23.   {
  24.    BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
  25.    String line=null;
  26.    byte[]buf=null;
  27.    StringBuffer buff=new StringBuffer();
  28.    while((line=bufr.readLine())!=null)
  29.    {
  30.     if ("886".equals(line))
  31.      break;
  32.     if(buff!=null){
  33.             buff.append("\n");
  34.     }
  35.     buff.append(line);
  36.    // buf=line.getBytes();
  37.    }
  38.    buf=buff.toString().getBytes();
  39.     DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10012);
  40.     ds.send(dp);
  41.    
  42.    
  43.   }
  44.   catch (Exception e)
  45.   {
  46.    throw new RuntimeException("发送端失败");
  47.   }
  48. }
  49. }
  50. class Rece implements Runnable
  51. {
  52. private DatagramSocket ds;
  53. Rece(DatagramSocket ds)
  54. {
  55.   this.ds=ds;
  56. }
  57. public void run()
  58. {
  59.   try
  60.   {
  61.    while(true)
  62.    {
  63.     byte[]buf=new byte[1024];
  64.     DatagramPacket dp=new DatagramPacket(buf,buf.length);
  65.     ds.receive(dp);
  66.     String ip=dp.getAddress().getHostAddress();
  67.     String data=new String(dp.getData(),0,dp.getLength());
  68.     System.out.println(ip+":"+data);
  69.    }
  70.   }
  71.   catch (Exception e)
  72.   {
  73.    throw new RuntimeException("接收失败");
  74.   }
  75. }
  76. }
  77. public class  ChatDemo
  78. {
  79. public static void main(String[] args) throws Exception
  80. {
  81.   DatagramSocket sendSocket=new DatagramSocket();
  82.   DatagramSocket receSocket=new DatagramSocket(10012);
  83.   new Thread(new Send(sendSocket)).start();
  84.   new Thread(new Rece(receSocket)).start();
  85.   //System.out.println("Hello World!");
  86. }
  87. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 赞一个!

查看全部评分

回复 使用道具 举报
此问题已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马