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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁航斌 中级黑马   /  2013-4-7 20:29  /  1600 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 梁航斌 于 2013-4-8 08:51 编辑

自己看完视频后弄的小聊天程序一枚,遇到一点问题。直接上源码了。问题在下面。怎么解决呢?还有代码还可以怎么优化?还要注意哪些隐患
  1. package mytalkDemo;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import java.net.*;
  5. import java.io.*;
  6. public class awtDemo
  7. {
  8.         
  9.         public static void main(String []args) throws Exception{
  10.                 //创建DatagramSocket对象
  11.                 DatagramSocket sds = new DatagramSocket();
  12.                 DatagramSocket rds = new DatagramSocket(10010);
  13.                 //创建一个Ui
  14.                 awtUi au = new awtUi(sds);
  15.                 //开启一个线程用来接收信息
  16.                 new Thread(new recDemo(rds,au.show)).start();
  17.         }
  18. }
  19. //Ui组件
  20. class awtUi
  21. {
  22.         //定义控件
  23.         private Frame f;
  24.         private Button b;
  25.         public TextArea show;
  26.         private TextArea talk;
  27.         //创建DatagramSocket对象
  28.         private DatagramSocket sds;
  29.         //加载控件
  30.         awtUi(DatagramSocket sds){
  31.                 this.sds = sds;
  32.                 init();
  33.         }
  34.         //控件初始化
  35.         public void init(){
  36.                 f = new Frame("我的聊天软件");
  37.                 b = new Button("发送");
  38.                 show = new TextArea();
  39.                 talk = new TextArea();
  40.                 f.setLayout(new FlowLayout());
  41.                 f.setBounds(200,100,400,500);
  42.                 show.setColumns(50);
  43.                 show.setRows(15);
  44.                 f.add(show);
  45.                 talk.setColumns(50);
  46.                 talk.setRows(8);
  47.                 f.add(talk);
  48.                 f.add(b);
  49.                 f.setVisible(true);
  50.                 event();
  51.         }
  52.         //初始化监听事件
  53.         public void event(){
  54.                 f.addWindowListener(new WindowAdapter(){
  55.                         public void windowClosing(WindowEvent e){
  56.                                 System.exit(0);
  57.                         }
  58.                 });
  59.                 talk.addKeyListener(new KeyAdapter(){
  60.                         public void keyPressed(KeyEvent e){
  61.                                 if(e.isControlDown()&&e.getKeyCode() == e.VK_ENTER){
  62.                                         try{
  63.                                                 sendfuntion();
  64.                                         }
  65.                                         catch(Exception ex){
  66.                                                 throw new RuntimeException("发送失败");
  67.                                         }
  68.                                 }
  69.                         }
  70.                 });
  71.                 b.addActionListener(new ActionListener(){
  72.                         public void actionPerformed(ActionEvent e){
  73.                                 try{
  74.                                                 sendfuntion();
  75.                                         }
  76.                                         catch(Exception ex){
  77.                                                 throw new RuntimeException("发送失败");
  78.                                         }
  79.                         }
  80.                 });
  81.         }
  82.         //发送数据方法
  83.         public void sendfuntion() throws Exception{
  84.                 String ts = talk.getText();
  85.                 byte []buf = ts.getBytes();
  86.                 DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10010);
  87.                 sds.send(dp);
  88.                 talk.setText("");
  89.         }

  90. }
  91. //这里有点疑惑
  92. class recDemo implements Runnable
  93. {
  94.         
  95.         private TextArea show;
  96.         private DatagramSocket rds;
  97.         recDemo(DatagramSocket rds,TextArea show){
  98.                 this.rds = rds;
  99.                 this.show = show;
  100.         }
  101.         public void run(){
  102.                 try{
  103.                 while(true){
  104.                         byte []buf = new byte[1024];
  105.                         DatagramPacket dp = new DatagramPacket(buf,buf.length);
  106.                         rds.receive(dp);
  107.                         String ip = dp.getAddress().getHostAddress();
  108.                         //这里该怎么判断ip如果是自己的就替换成me呢?
  109.                         /*if(ip.equals(InetAddress.getByName("127.0.0.1").getHostAddress())){
  110.                                 ip = "Me";
  111.                         */}
  112.                         String data = new String(dp.getData(),0,dp.getLength());
  113.                         show.append(ip+": "+data+"\r\n");
  114.                 }
  115.                 }
  116.                 catch(Exception e){
  117.                         throw new RuntimeException("接收失败");
  118.                 }
  119.         }
  120. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
楼主我只能帮你倒这里了

QQ截图20130407222543.png (3.24 KB, 下载次数: 18)

QQ截图20130407222543.png
回复 使用道具 举报
赵晓东 发表于 2013-4-7 22:25
楼主我只能帮你倒这里了

谢谢,已经解决了。
回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马