代码改变世界

聊天器

2011-08-02 23:08  shiyibin  阅读(280)  评论(0编辑  收藏  举报

package day22.pm;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ChatRoomClient {
 private Socket s;
 private BufferedReader br;
 private PrintWriter pw;
 
 public ChatRoomClient(String host,int port)throws IOException{
  s=new Socket(host,port);
  br=new BufferedReader(new InputStreamReader(s.getInputStream()));
  pw=new PrintWriter(s.getOutputStream());
 }
 
 public void sendMessage(String str){
  pw.println(str);
  pw.flush();
 }
 
 public String reciveMessage(){
  try {
   return br.readLine();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return null;
 }
 
 public void close(){
  try {
   s.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 

}

package day22.pm;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class ClientFrame extends JFrame{
 private JTextArea area;
 private JLabel label;
 private JTextField field;
 private JButton button;
 private String userName;
 private ChatRoomClient client;
 
 
 public ClientFrame(){
  do {
   String host = JOptionPane.showInputDialog(this, "请输入服务器地址:");
   if(host==null){
    System.exit(0);
   }
   try {
    client = new ChatRoomClient(host, 8888);
   } catch (IOException e) {
    JOptionPane.showMessageDialog(this, "无法建立网络连接,请检查网络参数!");
   }
  } while (client==null); 
  
  String str=JOptionPane.showInputDialog(this,"请输入用户名:");
  userName=str.trim();
  area=new JTextArea(20,40);
  area.setEditable(false);
  label=new JLabel(userName);
  field=new JTextField(25);
  button=new JButton("发送");
  
  init();
  addEventHandler();
 }
 
 public void init(){
  JScrollPane jsp=new JScrollPane(area);
  this.add(jsp,BorderLayout.CENTER);
  JPanel panel=new JPanel();
  panel.add(label);
  panel.add(field);
  panel.add(button);
  
  this.add(panel,BorderLayout.SOUTH);
 }
 
 public void addEventHandler(){
  button.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    client.sendMessage(userName+":"+field.getText());
    field.setText("");
   }
  });
  
  this.addWindowListener(new WindowAdapter(){
   public void windowClosing(WindowEvent arg0) {
    int op=JOptionPane.showConfirmDialog(ClientFrame.this, "确定要离开聊天室吗?","确认退出",JOptionPane.YES_NO_OPTION);
    if(op==JOptionPane.YES_OPTION){
     client.sendMessage("%EXIT%:"+userName);
     try {
      Thread.sleep(200);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
     client.close();
     System.exit(0);
    }
   }
  });
 }
 
 public void showMe(){
  this.pack();
  this.setVisible(true);
  this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
  new ReadMessageThread().start();
 }
 
 private class ReadMessageThread extends Thread{
  public void run(){
   while(true){
    String str=client.reciveMessage();
    area.append(str+"\n");
   }
  }
 }
 
 public static void main(String[] args){
  new ClientFrame().showMe();
 }

}