110,534
社区成员
发帖
与我相关
我的任务
分享
public class Client extends JFrame implements ActionListener {
JPanel contentPane;
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JLabel jLabel3 = new JLabel();
JTextField jTextField_server = new JTextField("127.0.0.1");
JTextField jTextField_port = new JTextField("4700");
JTextField jTextField_message = new JTextField();
JButton jButton_connect = new JButton();
JButton jButton_send = new JButton();
//建立一个新的JScrollPane对象,当组件大于显示区域时会自动产生滚动轴
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea jTextArea_show = new JTextArea();
BufferedReader instr = null;
Socket socket = null;
PrintWriter os = null;
public Client() {
jbInit();//初始化
}
//连接
private void connectServer(String ip, int port) {
try {
if (jButton_connect.getText().trim().equals("连接")) {
jButton_connect.setText("连接服务器...");
socket = new Socket(ip, port);
jButton_connect.setText("正在聊天");
MyThread t = new MyThread();
t.start();
}
} catch (Exception ex) {
/*null*/
}
}
//发送数据
private void sendData(String s) {
try {
os = new PrintWriter(socket.getOutputStream());
os.println(s);
os.flush();
this.jTextArea_show.append("客户端:" + s + "\n");
jTextField_message.setText("");
} catch (Exception e) {
/*null*/
}
}
class MyThread extends Thread {
@Override
public void run() {
try {
os = new PrintWriter(socket.getOutputStream());
instr = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
this.sleep(100);
if (instr.ready()) {
jTextArea_show.append("服务器:" + instr.readLine() + "\n");
}
}
} catch (Exception e) {
/*null*/
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jButton_connect) {
//连接
String ip = jTextField_message.getText().trim();
int port = Integer.parseInt(jTextField_port.getText().trim());
connectServer(ip, port);
}
if (e.getSource() == jButton_send) {
//发送
String s = this.jTextField_message.getText().trim();
sendData(s);
}
}
private void jbInit() {
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(null);
jLabel1.setFont(new Font("宋体", 0, 14));
jLabel1.setText("服务器名称");
jLabel1.setBounds(new Rectangle(20, 22, 87, 28));
this.setSize(new Dimension(540, 340));//设置宽度和高度
this.setTitle("客户端");
jTextArea_show.setEditable(false);
jTextField_server.setBounds(new Rectangle(114, 26, 108, 24));
jLabel2.setBounds(new Rectangle(250, 25, 72, 28));
jLabel2.setFont(new Font("宋体", 0, 14));
jLabel2.setText("端口号");
jTextField_port.setBounds(new Rectangle(320, 27, 108, 24));
jButton_connect.setBounds(new Rectangle(440, 28, 73, 25));
jButton_connect.setFont(new Font("Dialog", 0, 14));
jButton_connect.setBorder(BorderFactory.createEtchedBorder());
jButton_connect.setActionCommand("jButton1");
jButton_connect.setText("连接");
jLabel3.setBounds(new Rectangle(27, 57, 87, 28));
jLabel3.setText("请输入信息");
jLabel3.setFont(new Font("宋体", 0, 14));
jTextField_message.setBounds(new Rectangle(114, 60, 314, 24));
jButton_send.setText("发送");
jButton_send.setActionCommand("jButton1");
jButton_send.setBorder(BorderFactory.createEtchedBorder());
jButton_send.setBounds(new Rectangle(440, 58, 73, 25));
jButton_send.setFont(new Font("Dialog", 0, 14));
jScrollPane1.setBounds(new Rectangle(23, 92, 493, 189));
contentPane.add(jLabel1, null);
contentPane.add(jTextField_server, null);
contentPane.add(jLabel2, null);
contentPane.add(jTextField_port, null);
contentPane.add(jButton_connect, null);
contentPane.add(jLabel3, null);
contentPane.add(jTextField_message, null);
contentPane.add(jButton_send, null);
contentPane.add(jScrollPane1, null);
jScrollPane1.getViewport().add(jTextArea_show, null);
jButton_connect.addActionListener(this);
jButton_send.addActionListener(this);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
try {
socket.close();
instr.close();
os.close();;
System.exit(0);
} catch (Exception ex) {
/*null*/
}
}
});
}
public static void main(String arg[]) {
JFrame.setDefaultLookAndFeelDecorated(true);
Client frm = new Client();
frm.setVisible(true);
}
}
public class Server extends JFrame implements ActionListener {
JPanel contentPane;
JLabel jLabe2 = new JLabel();
JTextField jTextField2 = new JTextField("4700");
JButton jButton1 = new JButton();
JLabel jLabel3 = new JLabel();
JTextField jTextField3 = new JTextField();
JButton jButton2 = new JButton();
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea jTextArea1 = new JTextArea();
ServerSocket server = null;
Socket socket = null;
BufferedReader instr = null;
PrintWriter os = null;
//创建frame
public Server() {
jbInit();
}
//侦听端口
private void ListenClient(int port) {
try {
if (jButton1.getText().trim().equals("侦听")) {
server = new ServerSocket(port);
jButton1.setText("正在侦听...");
socket = server.accept();//等待,一直到客户端连接成功才继续执行
sendData("已经成功连接...");
jButton1.setText("正在聊天..");
jTextArea1.append("客户端已经连接到服务器\n");
MyThread t = new MyThread();
t.start();
}
} catch (Exception e) {
}
}
//发送数据
private void sendData(String s) {
try {
os = new PrintWriter(socket.getOutputStream());
os.println(s);
os.flush();
if (!s.equals("已经成功连接...")) {
this.jTextArea1.append("服务器:" + s + "\n");
jTextField3.setText("");
}
} catch (Exception e) {
}
}
//该线程负责接收数据
class MyThread extends Thread {
public void run() {
try {
while (true) {
this.sleep(100);
instr = new BufferedReader(new InputStreamReader(socket.getInputStream()));
if (instr.ready()) {
//检查接收数据
jTextArea1.append("客户端:" + instr.readLine() + "\n");
}
}
} catch (Exception ex) {
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jButton1) {
int port = Integer.parseInt(jTextField2.getText().trim());
ListenClient(port);
}
if (e.getSource() == jButton2) {
String s = this.jTextField3.getText().trim();
sendData(s);
}
}
//初始化,构造函数调用此函数
private void jbInit() {
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(null);
this.setSize(new Dimension(540, 340));
this.setTitle("服务器");
jLabe2.setBounds(new Rectangle(22, 27, 73, 28));
jLabe2.setText("端口号");
jLabe2.setFont(new Font("宋体", 0, 14));
jTextField2.setBounds(new Rectangle(113, 27, 315, 24));
jButton1.setBounds(new Rectangle(440, 28, 73, 25));
jButton1.setFont(new Font("Dialog", 0, 14));
jButton1.setBorder(BorderFactory.createEtchedBorder());
jButton1.setActionCommand("jButton1");
jButton1.setText("侦听");
jLabel3.setBounds(new Rectangle(23, 57, 87, 28));
jLabel3.setText("请输入信息");
jLabel3.setFont(new Font("宋体", 0, 14));
jTextField3.setBounds(new Rectangle(114, 60, 314, 24));
jTextField3.setText("");
jTextArea1.setEditable(false);
jButton2.setText("发送");
jButton2.setActionCommand("jButton2");
jButton2.setBorder(BorderFactory.createEtchedBorder());
jButton2.setFont(new Font("Dialog", 0, 14));
jButton2.setBounds(new Rectangle(440, 58, 73, 25));
jScrollPane1.setBounds(new Rectangle(23, 92, 493, 189));
contentPane.add(jTextField2, null);
contentPane.add(jButton1, null);
contentPane.add(jLabel3, null);
contentPane.add(jTextField3, null);
contentPane.add(jButton2, null);
contentPane.add(jScrollPane1, null);
contentPane.add(jLabe2, null);
jScrollPane1.getViewport().add(jTextArea1, null);
jButton1.addActionListener(this);
jButton2.addActionListener(this);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
try {
socket.close();
instr.close();
System.exit(0);
} catch (Exception ex) {
}
}
});
}
public static void main(String arg[]) {
JFrame.setDefaultLookAndFeelDecorated(true);
Server frm = new Server();
frm.setVisible(true);
}
}