public class ClientFrame extends Frame {
private TextField textFieldContent = new TextField();
private TextArea textAreaContent = new TextArea();
private Socket socket = null ;
private OutputStream out = null ;
private DataOutputStream dos = null ;
private InputStream in = null ;
private DataInputStream dis = null ;
private boolean flag = false ;
/**
* 启动客户端程序
*
* @param args
*/
public static void main(String[] args) {
new ClientFrame().init();
}
/**
* 功能:对窗口进行初始化
*/
private void init() {
this .setSize( 300 , 300 );
setLocation( 250 , 150 );
setVisible( true );
setTitle( "WeChatRoom" );
// 添加控件
this .add(textAreaContent);
this .add(textFieldContent, BorderLayout.SOUTH);
textAreaContent.setFocusable( false );
pack();
// 关闭事件
addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println( "用户试图关闭窗口" );
disconnect();
System.exit( 0 );
}
});
// textFieldContent添加回车事件
textFieldContent.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
onClickEnter();
}
});
// 建立连接
connect();
new Thread( new ReciveMessage()).start();
}
private class ReciveMessage implements Runnable {
@Override
public void run() {
flag = true ;
try {
while (flag) {
String message = dis.readUTF();
textAreaContent.append(message + "\n" );
}
} catch (EOFException e) {
flag = false ;
System.out.println( "客户端已关闭" );
// e.printStackTrace();
} catch (SocketException e) {
flag = false ;
System.out.println( "客户端已关闭" );
// e.printStackTrace();
} catch (IOException e) {
flag = false ;
System.out.println( "接受消息失败" );
e.printStackTrace();
}
}
}
/**
* 功能:当点击回车时触发事件
*/
private void onClickEnter() {
String message = textFieldContent.getText().trim();
if (message != null && !message.equals( "" )) {
String time = new SimpleDateFormat( "h:m:s" ).format( new Date());
textAreaContent.append(time + "\n" + message + "\n" );
textFieldContent.setText( "" );
sendMessageToServer(message);
}
}
/**
* 功能:给服务器发送消息
*
* @param message
*/
private void sendMessageToServer(String message) {
try {
dos.writeUTF(message);
dos.flush();
} catch (IOException e) {
System.out.println( "发送消息失败" );
e.printStackTrace();
}
}
/**
* 功能:申请socket链接
*/
private void connect() {
try {
socket = new Socket( "localhost" , 8888 );
out = socket.getOutputStream();
dos = new DataOutputStream(out);
in = socket.getInputStream();
dis = new DataInputStream(in);
} catch (UnknownHostException e) {
System.out.println( "申请链接失败" );
e.printStackTrace();
} catch (IOException e) {
System.out.println( "申请链接失败" );
e.printStackTrace();
}
}
/**
* 功能:关闭流和链接
*/
private void disconnect() {
flag = false ;
if (dos != null ) {
try {
dos.close();
} catch (IOException e) {
System.out.println( "dos关闭失败" );
e.printStackTrace();
}
}
if (out != null ) {
try {
out.close();
} catch (IOException e) {
System.out.println( "dos关闭失败" );
e.printStackTrace();
}
}
if (socket != null ) {
try {
socket.close();
} catch (IOException e) {
System.out.println( "socket关闭失败" );
e.printStackTrace();
}
;
}
}
}
|