-
package 一对一用户; import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; public class fuwuchuangkou extends JFrame { private JTextArea ta_info; private ServerSocket server; // 声明ServerSocket对象 private Socket socket; // 声明Socket对象socket private Vector<Socket> vector = new Vector<Socket>();// 用于存储连接到服务器的客户端套接字对象 public void createSocket() { try { server = new ServerSocket(1978); while (true) { ta_info.append("等待新客户连接......\n"); socket = server.accept();// 创建套接字对象 vector.add(socket);// 将套接字对象添加到向量对象中 ta_info.append("客户端连接成功。" + socket + "\n"); new ServerThread(socket).start();// 创建并启动线程对象 } } catch (IOException e) { e.printStackTrace(); } } class ServerThread extends Thread { Socket socket; public ServerThread(Socket socket) { this.socket = socket; } public void run() { try { BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream()));// 创建输入流对象 while (true) { String info = in.readLine();// 读取信息 for (Socket s : vector) {// 遍历所有客户端套接字对象 if (s != socket) {// 如果不是发送信息的套接字对象 PrintWriter out = new PrintWriter(s .getOutputStream(), true);// 创建输出流对象 out.println(info);// 发送信息 out.flush();// 刷新输出缓冲区 } } } } catch (IOException e) { ta_info.append(socket + "已经退出。\n"); vector.remove(socket);// 移除退出的客户端套接字 } } } public static void main(String args[]) { fuwuchuangkou frame = new fuwuchuangkou(); frame.setVisible(true); frame.createSocket(); } /** * Create the frame */ public fuwuchuangkou() { super(); setTitle("一对一"); setBounds(100, 100, 385, 266); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); ta_info = new JTextArea(); scrollPane.setViewportView(ta_info); } }
-
package 一对一用户; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class kehuchuangkou extends JFrame { private JTextArea ta_info; private JTextField tf_send; PrintWriter out;// 声明输出流对象 /** * Launch the application * * @param args */ public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { public void run() { try { kehuchuangkou frame = new kehuchuangkou(); frame.setVisible(true); frame.createClientSocket(); } catch (Exception e) { e.printStackTrace(); } } }); } public void createClientSocket() { try { Socket socket = new Socket("127.0.0.1", 1978);// 连接本地1978端口 out = new PrintWriter(socket.getOutputStream(), true);// 创建输出流对象 new ClientThread(socket).start();// 创建并启动线程对象 } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } class ClientThread extends Thread { Socket socket; public ClientThread(Socket socket) { this.socket = socket; } public void run() { try { BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream()));// 创建输入流对象 while (true) { String info = in.readLine();// 读取信息 ta_info.append(info + "\n");// 在文本域中显示信息 if (info.equals("88")) { break;// 结束线程 } } } catch (IOException e) { e.printStackTrace(); } } } private void send() { String info = tf_send.getText();// 获得输入的信息 if (info.equals("")) { return;// 如果没输入信息则返回,即不发送 } if (info.equals("88")) { System.exit(0);// 如果没输入信息是88,则退出 } out.println(info);// 发送信息 out.flush();// 刷新输出缓冲区 tf_send.setText(null);// 清空文本框 } public kehuchuangkou() { //创建面板 super(); setTitle("一对一"); setBounds(100, 100, 385, 266); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JPanel panel = new JPanel(); getContentPane().add(panel, BorderLayout.SOUTH); final JLabel label = new JLabel(); label.setText("输入聊天内容:"); panel.add(label); tf_send = new JTextField(); tf_send.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { send(); } }); tf_send.setPreferredSize(new Dimension(180, 25)); panel.add(tf_send); final JButton button = new JButton(); button.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { send(); } }); button.setText("发 送"); panel.add(button); final JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); ta_info = new JTextArea(); scrollPane.setViewportView(ta_info); } }
-
package 一对一用户; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class kehu1 extends JFrame { private JTextArea ta_info; private JTextField tf_send; PrintWriter out;// 声明输出流对象 /** * Launch the application * * @param args */ public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { public void run() { try { kehuchuangkou frame = new kehuchuangkou(); frame.setVisible(true); frame.createClientSocket(); } catch (Exception e) { e.printStackTrace(); } } }); } public void createClientSocket() { try { Socket socket = new Socket("127.0.0.1", 1978);// 连接本地1978端口 out = new PrintWriter(socket.getOutputStream(), true);// 创建输出流对象 new ClientThread(socket).start();// 创建并启动线程对象 } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } class ClientThread extends Thread { Socket socket; public ClientThread(Socket socket) { this.socket = socket; } public void run() { try { BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream()));// 创建输入流对象 while (true) { String info = in.readLine();// 读取信息 ta_info.append(info + "\n");// 在文本域中显示信息 if (info.equals("88")) { break;// 结束线程 } } } catch (IOException e) { e.printStackTrace(); } } } private void send() { String info = tf_send.getText();// 获得输入的信息 if (info.equals("")) { return;// 如果没输入信息则返回,即不发送 } if (info.equals("88")) { System.exit(0);// 如果没输入信息是88,则退出 } out.println(info);// 发送信息 out.flush();// 刷新输出缓冲区 tf_send.setText(null);// 清空文本框 } public kehu1() { //创建面板 super(); setTitle("一对一"); setBounds(100, 100, 385, 266); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JPanel panel = new JPanel(); getContentPane().add(panel, BorderLayout.SOUTH); final JLabel label = new JLabel(); label.setText("输入聊天内容:"); panel.add(label); tf_send = new JTextField(); tf_send.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { send(); } }); tf_send.setPreferredSize(new Dimension(180, 25)); panel.add(tf_send); final JButton button = new JButton(); button.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { send(); } }); button.setText("发 送"); panel.add(button); final JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); ta_info = new JTextArea(); scrollPane.setViewportView(ta_info); } }
运行结果如下: