2014.11.23聊天程序,网络转载,必须先点击“侦听”,再点击“连接”

来源:互联网 发布:不看广告的软件 编辑:程序博客网 时间:2024/06/15 18:13

1.服务器

package com.hechao;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import java.net.*;/** * 服务器 * @author hechao * */public class Server extends JFrame implements ActionListener {private static final long serialVersionUID = 1L;JPanel contentPane;JLabel jLabel2 = 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;/** * 构造器 */// Construct the framepublic Server() {jbInit();}/** * 我的线程 * @author hechao * */class MyThread extends Thread {// 该线程负责接受数据@SuppressWarnings("static-access")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) {}}}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 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 ex) {}}/** * 发消息 * @param s 消息内容 */private void sendData(String s) {// 发送数据try {os = new PrintWriter(socket.getOutputStream());os.println(s);os.flush();if (!s.equals("已经成功连接。。。"))this.jTextArea1.append("Server:" + s + "\n");} catch (Exception ex) {}}/** * 窗口初始化 */// Component initializationprivate void jbInit() {contentPane = (JPanel) this.getContentPane();contentPane.setLayout(null);this.setSize(new Dimension(540, 340));this.setTitle("服务器");jLabel2.setBounds(new Rectangle(22, 27, 72, 28));jLabel2.setText("端口号");jLabel2.setFont(new java.awt.Font("宋体", 0, 14));jTextField2.setBounds(new Rectangle(113, 27, 315, 24));jButton1.setBounds(new Rectangle(440, 28, 73, 25));jButton1.setFont(new java.awt.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 java.awt.Font("宋体", 0, 14));jTextField3.setBounds(new Rectangle(114, 60, 314, 24));jTextField3.setText("");jButton2.setText("发送");jButton2.setActionCommand("jButton1");jButton2.setBorder(BorderFactory.createEtchedBorder());jButton2.setFont(new java.awt.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(jLabel2, null);jScrollPane1.getViewport().add(jTextArea1, null);jButton1.addActionListener(this);jButton2.addActionListener(this);this.addWindowListener(new WindowAdapter() {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);}}


2.客户端

<strong>package com.hechao;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import java.net.*;/** * 客户端 * @author hechao * */public class Client extends JFrame implements ActionListener {private static final long serialVersionUID = 1L;JPanel contentPane;JLabel jLabel1 = new JLabel();JTextField jTextField1 = new JTextField("127.0.0.1");JLabel jLabel2 = 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();BufferedReader instr = null;Socket socket = null;PrintWriter os = null;/** * 构造器 */public Client() {jbInit();}/** * 我的线程 * @author hechao * */class MyThread extends Thread {@SuppressWarnings("static-access")public void run() {try {os = new PrintWriter(socket.getOutputStream());instr = new BufferedReader(new InputStreamReader(socket.getInputStream()));while (true) {this.sleep(100);if (instr.ready()) {jTextArea1.append("服务器: " + instr.readLine() + "\n");}}} catch (Exception ex) {}}}public void actionPerformed(ActionEvent e) {if (e.getSource() == jButton1) {String ip = jTextField3.getText().trim();int port = Integer.parseInt(jTextField2.getText().trim());connectServer(ip, port);}if (e.getSource() == jButton2) {String s = this.jTextField3.getText().trim();sendData(s);}}/** * 创建链接 * @param ip IP * @param port端口 */private void connectServer(String ip, int port) {// 连接try {if (jButton1.getText().trim().equals("连接")) {jButton1.setText("连接服务器...");socket = new Socket(ip, port);jButton1.setText("正在聊天");MyThread t = new MyThread();t.start();}} catch (Exception ex) {}}/** * 发送消息 * @param s 消息内容 */private void sendData(String s) {// 发送数据try {os = new PrintWriter(socket.getOutputStream());os.println(s);os.flush();this.jTextArea1.append("Server:" + s + "\n");} catch (Exception ex) {}}/** * 初始化控件 */private void jbInit() {contentPane = (JPanel) this.getContentPane();jLabel1.setFont(new java.awt.Font("宋体", 0, 14));jLabel1.setText("服务器名称");jLabel1.setBounds(new Rectangle(20, 22, 87, 28));contentPane.setLayout(null);this.setSize(new Dimension(540, 340));this.setTitle("客户端");jTextField1.setBounds(new Rectangle(114, 26, 108, 24));jLabel2.setBounds(new Rectangle(250, 25, 72, 28));jLabel2.setText("端口号");jLabel2.setFont(new java.awt.Font("宋体", 0, 14));jTextField2.setBounds(new Rectangle(320, 27, 108, 24));jButton1.setBounds(new Rectangle(440, 28, 73, 25));jButton1.setFont(new java.awt.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 java.awt.Font("宋体", 0, 14));jTextField3.setBounds(new Rectangle(114, 60, 314, 24));jButton2.setText("发送");jButton2.setActionCommand("jButton1");jButton2.setBorder(BorderFactory.createEtchedBorder());jButton2.setFont(new java.awt.Font("Dialog", 0, 14));jButton2.setBounds(new Rectangle(440, 58, 73, 25));jScrollPane1.setBounds(new Rectangle(23, 92, 493, 189));contentPane.add(jLabel1, null);contentPane.add(jTextField1, null);contentPane.add(jLabel2, null);contentPane.add(jTextField2, null);contentPane.add(jButton1, null);contentPane.add(jLabel3, null);contentPane.add(jTextField3, null);contentPane.add(jButton2, null);contentPane.add(jScrollPane1, null);jScrollPane1.getViewport().add(jTextArea1, null);jButton1.addActionListener(this);jButton2.addActionListener(this);this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {try {socket.close();instr.close();os.close();System.exit(0);} catch (Exception ex) {}}});}public static void main(String arg[]) {JFrame.setDefaultLookAndFeelDecorated(true);Client frm = new Client();frm.setVisible(true);}}</strong>


0 0
原创粉丝点击