package com.feng.tcp;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.sun.org.apache.bcel.internal.util.BCELifier;
public class Client extends Frame {
/**
* 定义成员变量
*/
//登陆框组件
Label labLogin=new Label("请输入名字");
TextField txtLogin=new TextField(20);
Button btnLogin=new Button("登陆");
//聊天室组件
TextArea txtA=new TextArea();
TextField txtMessage=new TextField();
Button btnSub=new Button("确定");
//客户端变量
Socket s=null;
DataOutputStream dos=null;
DataInputStream dis=null;
boolean boo=false;
String userName;
public static void main(String[] args) {
new Client().client();
}
public void client(){
setTitle("用户登录框");//标题
setSize(300, 100);//大小
setLocationRelativeTo(null);//出现位置
setLayout(new FlowLayout());//布局
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
btnLogin.addActionListener(new LoginListener());
add(labLogin);
add(txtLogin);
add(btnLogin);
setVisible(true);
}
private class LoginListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
userName=txtLogin.getText();
removeAll();
kaiLiao();
}
}
//开聊
public void kaiLiao() {
setTitle(userName);
setSize(500,300);
setLocationRelativeTo(null);
setLayout(new BorderLayout());
add(txtA,"North");
Panel p=new Panel();
p.add(txtMessage);
p.add(btnSub);
// add(p,"South");
add(p,BorderLayout.SOUTH);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
try {
disconnect();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.exit(0);
}
});
connect();
btnSub.addActionListener(new MessageListener());
pack();//自动调整大小
new Thread(new GetServerMessage()).start();
}
public class MessageListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String message=txtMessage.getText();//获取输入的字符串
txtMessage.setText("");
Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd,hh:mm:ss");//yyyy一定要小写
String strDate=df.format(date);
try {
dos.writeUTF(userName+":"+strDate);//把输入的信息以及日期返回服务器
dos.writeUTF(" "+message);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
//初始化套接字、连接流
public void connect(){
try {
s=new Socket("127.0.0.1",8888);
dos=new DataOutputStream(s.getOutputStream());
dis=new DataInputStream(s.getInputStream());
boo=true;
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void disconnect(){
try {
if(dos!=null){
dos.close();
}
if(dis!=null){
dis.close();
}
if(s!=null){
s.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private class GetServerMessage implements Runnable {
public void run() {
// TODO Auto-generated method stub
while(boo){
try {
String strServer=dis.readUTF();
txtA.setText(txtA.getText()+strServer+"\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}