/* * Client.java * * Created on __DATE__, __TIME__ */ package cn.com.cssve.chat; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.text.SimpleDateFormat; import java.util.Date; import java.util.StringTokenizer; import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JOptionPane; import cn.com.zh.entity.User; import cn.com.zh.ui.MainFrame; public class Client extends javax.swing.JFrame { Socket socket; String clientName; private PrintWriter out; User u; public Client(Socket socket, String name,User u) { this.socket = socket; this.clientName = name; this.u=u; setTitle("欢迎【" + name + "】来到无聊【聊天室】"); initComponents(); new ChatThread(socket).start(); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { setVisible(false); } }); } //会话层 class ChatThread extends Thread { private Socket socket; public ChatThread(Socket socket) { this.socket = socket; } @Override public void run() { try { out = new PrintWriter(socket.getOutputStream(), true); BufferedReader br = new BufferedReader(new InputStreamReader( socket.getInputStream())); new GetThread(br).start(); out.println(clientName); } catch (IOException e) { e.printStackTrace(); } } } //获取信息 class GetThread extends Thread { private BufferedReader br; public GetThread(BufferedReader br) { this.br = br; } @Override public void run() { try { while (true) { String msg = br.readLine(); System.out.println(msg); //判断服务器是否已经关闭,或者被踢出来 if (msg == null) { break; } if (msg.startsWith("list:")) { DefaultListModel dlm = new DefaultListModel(); String list = msg.substring(5); StringTokenizer st = new StringTokenizer(list, "[,]"); System.out.println(st); while (st.hasMoreTokens()) { dlm.addElement(st.nextToken()); } jList1_user.setModel(dlm); } else { SimpleDateFormat sdf = new SimpleDateFormat( "yyyy年MM月dd日 HH:mm:ss"); String getTime = sdf.format(new Date()); jTextArea1.append(getTime+"\n"+msg + "\n"); } } } catch (IOException e) { } finally { JOptionPane .showMessageDialog( null, "<html>与主机失去联系!发生错误的原因可能有:<br>①您的昵称已经存在,请更改<br>②服务器已经关闭,请等待服务器重新启动<br>③您被管理员踢出来了!请注意遵守聊天室规则</html>"); // new ChatLoginInterface().setVisible(true); Client.this.dispose(); } } } //GEN-BEGIN:initComponents // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jPanel1 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); jList1_user = new javax.swing.JList(new DefaultListModel<>()); jScrollPane2 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea(); jTextField_import = new javax.swing.JTextField(); jButton_send = new javax.swing.JButton(); jComboBox1 = new javax.swing.JComboBox(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jPanel1.setBackground(new java.awt.Color(204, 255, 204)); jList1_user.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0), "\u7528\u6237\u5217\u8868", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("楷体", 1, 14))); jList1_user.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jList1_user.setDebugGraphicsOptions(javax.swing.DebugGraphics.NONE_OPTION); jScrollPane1.setViewportView(jList1_user); jTextArea1.setColumns(20); jTextArea1.setRows(5); jScrollPane2.setViewportView(jTextArea1); jButton_send.setText("\u53d1 \u9001"); jButton_send.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton_sendActionPerformed(evt); } }); jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "群 聊", "私 聊" })); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jTextField_import, javax.swing.GroupLayout.PREFERRED_SIZE, 357, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jButton_send) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jScrollPane2))) .addContainerGap(22, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(24, 24, 24) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 235, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jTextField_import, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jButton_send) .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(31, Short.MAX_VALUE)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); pack(); } //点击发送按钮 private void jButton_sendActionPerformed(java.awt.event.ActionEvent evt) { String text = jTextField_import.getText().trim(); //在下一次输入的时候将输入框清空 jTextField_import.setText(""); if (text.equals("")) { JOptionPane.showMessageDialog(null, "发送的消息不能为空,请输入内容之后再发送!"); }else{ // 获得发送消息的类型 int index=jComboBox1.getSelectedIndex(); if (index==0) {//群聊 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String getTime = sdf.format(new Date()); out.println(clientName + ":all:" + text); // jTextArea1.append(getTime+"\n"+clientName+"对所有人说:"+text+"\n"); }else{//私聊 int item = jList1_user.getSelectedIndex(); if (item==-1) { JOptionPane.showMessageDialog(null, "私聊必须选择一个用户"); }else{ String name = jList1_user.getSelectedValue().toString(); if (name.equals(clientName)) { JOptionPane.showMessageDialog(null, "您不能和自己私聊"); jTextField_import.setText(""); }else{ SimpleDateFormat sdf = new SimpleDateFormat( "yyyy年MM月dd日 HH:mm:ss"); String getTime = sdf.format(new Date()); jTextArea1.append(getTime+"\n"+clientName + "对" + name + "说:"+text); out.println(clientName + ":" + item + ":" + text); } } } } } // public static void main(String args[]) { // java.awt.EventQueue.invokeLater(new Runnable() { // public void run() { //// new Client().setVisible(true); // } // }); // } //GEN-BEGIN:variables // Variables declaration - do not modify private javax.swing.JButton jButton_send; private javax.swing.JComboBox jComboBox1; private javax.swing.JList jList1_user; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTextArea jTextArea1; private javax.swing.JTextField jTextField_import; // End of variables declaration//GEN-END:variables }

DoustrongWU LV5
2月21日
sunshine9920 LV12
2023年10月22日
rain112 LV31
2022年6月16日
testuser1234567 LV24
2022年5月31日
ming_123_9715 LV23
2022年5月3日
rodert LV14
2022年4月29日
wangxin199804 LV9
2022年4月3日
wyx065747 LV67
2022年4月2日
978806986 LV16
2022年3月24日
543666826 LV34
2022年3月12日

pxqtsht LV16
2月21日
DoustrongWU LV5
2月17日
zrq1025 LV11
2024年11月25日
krispeng LV14
2024年9月17日
ZALZXB20030525
2024年7月1日
暂无贡献等级
heshao LV2
2024年6月4日
hfffff LV1
2024年6月3日
MrDuan LV2
2024年5月15日
akittyboy LV9
2024年3月22日
jiayongchao258 LV9
2023年12月28日