java写的简单点对点聊天


import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JRadioButton;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class QQ extends JFrame implements ActionListener {        public static void main(String args[]) {                QQ qq = new QQ();        }        String input;        ServerSocket ss;        Socket s1, s2;        PrintWriter pw;        BufferedReader br;        private server s;        private client cc;        private JLabel l1, l2, l3, l4, l5, l6;        private JRadioButton jb[] = new JRadioButton[2];        private JTextField jf1, jf2, jf3, jf4;        private JButton j1, j2, j3;        private JTextArea ja;        public QQ() {                super("聊天");                Container c = getContentPane();                c.setLayout(null);                l1 = new JLabel("TCP通信程序");                l1.setFont(new Font("宋体", Font.BOLD, 16));                l1.setBackground(Color.black);                l1.setSize(2000, 20);                l1.setLocation(10, 10);                c.add(l1);                String str1[] = { "服务端", "客户端" };                ButtonGroup bg = new ButtonGroup();                for (int x = 0; x < str1.length; x++) {                        jb[x] = new JRadioButton(str1[x]);                        jb[x].setFont(new Font("宋体", Font.BOLD, 15));                        jb[x].setForeground(Color.black);                        jb[x].setSize(80, 40);                        jb[x].setLocation(10 + x * 80, 37);                        bg.add(jb[x]);                        c.add(jb[x]);                }                jb[0].setSelected(true);                l2 = new JLabel("连接主机IP");                l2.setFont(new Font("宋体", Font.BOLD, 16));                l2.setBackground(Color.black);                l2.setSize(120, 20);                l2.setLocation(20, 80);                c.add(l2);                jf1 = new JTextField("127.0.0.1");                jf1.setSize(220, 30);                jf1.setLocation(120, 80);                c.add(jf1);                jf3 = new JTextField("离线");                jf3.setSize(150, 30);                jf3.setLocation(280, 40);                c.add(jf3);                l5 = new JLabel("连接状态:");                l5.setFont(new Font("宋体", Font.BOLD, 16));                l5.setBackground(Color.black);                l5.setSize(120, 20);                l5.setLocation(200, 47);                c.add(l5);                l6 = new JLabel("昵称:");                l6.setFont(new Font("宋体", Font.BOLD, 16));                l6.setBackground(Color.black);                l6.setSize(120, 20);                l6.setLocation(200, 12);                c.add(l6);                jf4 = new JTextField("请输入昵称!");                jf4.setSize(150, 30);                jf4.setLocation(280, 10);                c.add(jf4);                j1 = new JButton("连接");                j1.setSize(110, 20);                j1.setLocation(360, 85);                j1.addActionListener(this);                c.add(j1);                l3 = new JLabel("接收到的信息");                l3.setFont(new Font("宋体", Font.BOLD, 16));                l3.setBackground(Color.black);                l3.setSize(120, 20);                l3.setLocation(20, 130);                c.add(l3);                ja = new JTextArea();                ja.setSize(250, 200);                ja.setLineWrap(true);                ja.setEditable(false);                JScrollPane js = new JScrollPane(ja);                js.setBounds(130, 130, 250, 200);                c.add(js);                l4 = new JLabel("发送信息");                l4.setFont(new Font("宋体", Font.BOLD, 16));                l4.setBackground(Color.black);                l4.setSize(120, 20);                l4.setLocation(20, 340);                c.add(l4);                jf2 = new JTextField("");                jf2.setSize(220, 30);                jf2.setLocation(120, 340);                c.add(jf2);                j2 = new JButton("发送信息");                j2.setSize(110, 20);                j2.setLocation(360, 350);                j2.addActionListener(this);                c.add(j2);                j3 = new JButton("结束连接");                j3.setSize(110, 20);                j3.setLocation(360, 110);                j3.addActionListener(this);                c.add(j3);                s = new server();                cc = new client();                j3.setEnabled(false);                j2.setEnabled(false);                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                setSize(500, 450);                setVisible(true);                setLocation(300, 300);        }        public void actionPerformed(ActionEvent e) {                // TODO 自动生成方法存根                if (e.getSource() == j1) {                        try {                                if (jb[0].isSelected() == true) {                                        input = "";                                        s.start();                                } else {                                        input ="";                                        cc.start();                                }                        } catch (Exception ee) {                                jf3.setText("发生错误");                        }                }                if (e.getSource() == j2) {                        ja.append(jf4.getText() + ": " + jf2.getText() + "\n");                        pw.write(jf4.getText() + ": " + jf2.getText() + "\n");                        jf2.setText("");                        pw.flush();                }                if (e.getSource() == j3) {                        try {                                if (jb[0].isSelected() == true) {                                        s1.close();                                        jf3.setText("离线");                                        jf3.setBackground(Color.WHITE);                                        j2.setEnabled(false);                                        j3.setEnabled(false);                                        j1.setEnabled(true);                                        s.stop();                                        ss.close();                                        cc.stop();                                        s2.close();                                }else {                                        s2.close();                                        jf3.setText("离线");                                        jf3.setBackground(Color.WHITE);                                        j2.setEnabled(false);                                        j3.setEnabled(false);                                        j1.setEnabled(true);                                        s.stop();                                        ss.close();                                        cc.stop();                                        s1.close();                                                                        }                        } catch (Exception e1) {                                // TODO 自动生成 catch 块                        }                }        }        class server extends Thread {                public void run() {                        try {                                j1.setEnabled(false);                                jf3.setText("正在连接中@");                                ss = new ServerSocket(4000);                                s1 = ss.accept();                                br = new BufferedReader(new InputStreamReader(s1                                                .getInputStream()));                                pw = new PrintWriter(s1.getOutputStream(), true);                                // bs=new BufferedOutputStream(os);                                while (true) {                                        if (ss.isBound() == true) {                                                jf3.setText("连接成功");                                                jf3.setBackground(Color.GREEN);                                                j2.setEnabled(true);                                                j3.setEnabled(true);                                                                                                break;                                        }                                }                                while (true) {                                        input = br.readLine();                                        if (input.length() > 0) {                                                ja.append(input);                                                ja.append("\n");                                        }                                }                        } catch (Exception e) {                                // TODO 自动生成 catch 块                        }                }        }        class client extends Thread {                public void run() {                        try {                                j1.setEnabled(false);                                jf3.setText("正在连接中@");                                s2 = new Socket(InetAddress.getByName(jf1.getText()), 4000);                                // s2=new Socket();                                // s2.connect(new InetSocketAddress(jf1.getText(),21),1000);                                br = new BufferedReader(new InputStreamReader(s2                                                .getInputStream()));                                pw = new PrintWriter(s2.getOutputStream(), true);                                // bs=new BufferedOutputStream(os);                                while (true) {                                        if (s2.isConnected() == true) {                                                jf3.setText("连接成功");                                                jf3.setBackground(Color.GREEN);                                                j2.setEnabled(true);                                                j3.setEnabled(true);                                                break;                                        }                                }                                input = "";                                while (true) {                                        input = br.readLine();                                        if (input.length() > 0) {                                                ja.append(input + "\n");                                        }                                }                        } catch (Exception e) {                                // TODO 自动生成 catch 块                        }                }        }}

你可能感兴趣的:(java)