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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张超 中级黑马   /  2012-11-22 12:58  /  1446 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张超 于 2012-11-22 13:58 编辑

/*
*  思路:分析可知编写一个聊天程序的步骤应该如下。
*   1  编写一个图形化界面。
*   2 通过Socket服务实现数据的传递;
*
* */
package GUITCP;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
public class TalkIng {
private Frame frame;

private List list;//定义一个显示接收到和发送的数据。
private TextField tf_2;//定义输入IP地址的文本框;
private TextField tf_3;//定义数据输入的文本框;
private Panel p;
private DatagramSocket ds;
private Menu fileMenu;
private MenuItem shangChuan;
private MenuBar menuBar;

public static void main(String[] args){
  TalkIng td1=new TalkIng();
  td1.init();
}
public  void init(){
  frame=new Frame("我的聊天软件");
  frame.setSize(300,300);
  tf_2=new TextField(15);
  tf_3=new TextField(20);
  list=new List(6);
  //fileMenu=new Menu("文件");
  //menuBar=new MenuBar();
  //shangChuan=new MenuItem("上传");
  try{
   ds=new DatagramSocket(4000);
  }
  catch(Exception e){
   e.printStackTrace();
  }
  new Thread(new Runnable(){
   public void run(){
    System.out.println("Demo2接收运行起来了");
    byte[] buf=new byte[1024];
    DatagramPacket dp=new DatagramPacket(buf,1024);
    while(true){
     try{
      ds.receive(dp);
      list.add(new String(buf,0,dp.getLength())+"PORT"+dp.getPort());
     }
     catch(Exception e){System.out.println(e.toString());}//    这个地方报控制针异常,并且还进入了死循环,疑问:那个receive()是阻塞方法,怎么会发生死循环的,还有就是对于空指针异常能不能获取这个异常所对应对象的名字,也就是那个对象产生的。
    }
   }
  }).start();
  
  p=new Panel();
  p.setLayout(new BorderLayout());
  
  //fileMenu.add(shangChuan);
  //menuBar.add(fileMenu);
  //frame.setMenuBar(menuBar);
  frame.add(list);
  p.add("West",tf_2);
  p.add("East",tf_3);
  frame.add("South",p);
  System.out.println("00");
  frame.setVisible(true);
  //增加窗体关闭的事件处理代码。
  frame.addWindowListener(new WindowAdapter(){
   public void windowClosing(WindowEvent e){
    ds.close();
    System.out.println("00");
    System.exit(0);
   }
  });
  //创建一个新的线程,用于数据的接手。
  
  //增加文本框按下Enter键发送的事件处理代码。
  tf_3.addKeyListener(new KeyAdapter(){
   [url=]//@Override[/url]
   public void keyPressed(KeyEvent e) {
    // TODO Auto-generated method stub
     int num=e.getKeyCode();
     System.out.println();
     if(num==KeyEvent.VK_ENTER)
     {
       byte[] buf;//
       buf=tf_3.getText().getBytes();
       if(buf.length!=0)
       {
        try {
        DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName(tf_2.getText()),4000);
        ds.send(dp);
        }
        catch (Exception e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
        }
        System.out.println("发送了吗");
        tf_3.setText("");
       }
       else
        System.out.println("亲!不允许空字符");
      
     }
  
   }
  });
  
}
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马