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 块 } } }}