聊天器
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();
}
}