📄 chatclient.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class ChatClient extends Frame {
Socket s = null; //共享Socket对象
DataOutputStream dos = null; //定义输出流,只调用一次就可以
DataInputStream dis = null; //输入流,用于显示服务器发来的信息
private boolean bConnected = false;
TextField tfTxt = new TextField();
TextArea taContent = new TextArea();
Thread tRecv = new Thread(new RecvThread()); //新建线程对象,用来判断connect关闭后,线程是否活
public static void main(String[] args) {
new ChatClient().launchFrame();
}
public void launchFrame() {
setLocation(400, 300);
this.setSize(500, 400);
add(tfTxt, BorderLayout.SOUTH); // 添加tftxt
add(taContent, BorderLayout.NORTH); // 添加文本框
pack(); // pack用来优化布局显示,出去空的。
//添加监听器
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent arg0) {
disconnect(); //窗体关闭,调用清理资源方法
System.exit(0); //关闭,退出
}
});
tfTxt.addActionListener(new TFListener()); //添加监听
setVisible(true);
connect();
tRecv.start(); //连接后,启动RecvThread 线程类
}
//方法用来连接服务器
public void connect() {
try {
s = new Socket("127.0.0.1", 8888);
dos = new DataOutputStream(s.getOutputStream()); //连接服务器成功就初始化数据输出流
dis = new DataInputStream(s.getInputStream()); //初始化
System.out.println("connected");
bConnected = true;
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void disconnect() { //清理资源方法
try {
dos.close();
dis.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
/*
try {
bConnected = false;
tRecv.join();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
dos.close();
dis.close();
s.close();
} catch (IOException e){
e.printStackTrace();
}*/
}
private class TFListener implements ActionListener { //定义TextField监听类
public void actionPerformed(ActionEvent e) {
String str = tfTxt.getText().trim(); //得到tftxt的字符串,去掉空格
//taContent.setText(str); //把字符串填入文本框
tfTxt.setText(""); //输入后,tfTxt为空
try {
dos.writeUTF(str); //往外写数据
dos.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
private class RecvThread implements Runnable { //用于接收服务器发来的信息线程类
public void run() {
try {
while(bConnected) {
String str = dis.readUTF();
taContent.setText(taContent.getText() + str + '\n'); //输出到TextArea,上下行显示
}
} catch (SocketException e) {
System.out.println("退出了,bye!");
} catch (EOFException e) {
System.out.println("退出了,bye-bye!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -