📄 mainframe.java
字号:
package multiclientnew;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.*;import java.io.*;import java.util.Vector; //引入Vector类,用于存储客户信息import java.util.StringTokenizer; //引入StringTokenizer类,用于信息分离/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2005</p> * <p>Company: </p> * @author not attributable * @version 1.0 */public class MainFrame extends JFrame { Socket socket=null; BufferedReader cin=null; PrintStream cout=null; String clientName=""; //用于存储客户登陆名称 JPanel contentPane; JLabel jLabel1 = new JLabel(); JLabel jLabel2 = new JLabel(); JLabel jLabel3 = new JLabel(); JTextField jTextField1 = new JTextField(); JTextField jTextField2 = new JTextField(); JTextField jTextField3 = new JTextField(); JTextField jTextField4 = new JTextField(); JLabel jLabel4 = new JLabel(); JButton jButton1 = new JButton(); JButton jButton2 = new JButton(); JButton jButton3 = new JButton(); JScrollPane jScrollPane1 = new JScrollPane(); JList jList1 = new JList(); JScrollPane jScrollPane2 = new JScrollPane(); JTextArea jTextArea1 = new JTextArea(); //Construct the frame public MainFrame() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } //Component initialization private void jbInit() throws Exception { contentPane = (JPanel) this.getContentPane(); jLabel1.setFont(new java.awt.Font("Dialog", 0, 14)); jLabel1.setText("服务器IP"); jLabel1.setBounds(new Rectangle(16, 20, 60, 23)); contentPane.setLayout(null); this.setSize(new Dimension(618, 317)); this.setTitle("多用户信息广播系统-客户端"); jLabel2.setBounds(new Rectangle(204, 20, 36, 23)); jLabel2.setText("端口"); jLabel2.setFont(new java.awt.Font("Dialog", 0, 14)); jLabel3.setBounds(new Rectangle(315, 20, 60, 23)); jLabel3.setText("客户名称"); jLabel3.setFont(new java.awt.Font("Dialog", 0, 14)); jTextField1.setFont(new java.awt.Font("Dialog", 0, 14)); jTextField1.setText("127.0.0.1"); jTextField1.setBounds(new Rectangle(77, 20, 120, 23)); jTextField2.setBounds(new Rectangle(240, 20, 63, 23)); jTextField2.setText("6544"); jTextField2.setFont(new java.awt.Font("Dialog", 0, 14)); jTextField3.setBounds(new Rectangle(382, 20, 104, 23)); jTextField3.setFont(new java.awt.Font("Dialog", 0, 14)); jTextField3.setText(""); jTextField4.setText("hello"); jTextField4.setFont(new java.awt.Font("Dialog", 0, 14)); jTextField4.setToolTipText(""); jTextField4.setBounds(new Rectangle(76, 61, 292, 23)); jLabel4.setBounds(new Rectangle(10, 61, 60, 23)); jLabel4.setText("聊天信息"); jLabel4.setFont(new java.awt.Font("Dialog", 0, 14)); jButton1.setBounds(new Rectangle(500, 20, 104, 28)); jButton1.setFont(new java.awt.Font("Dialog", 0, 14)); jButton1.setText("连接服务器"); jButton1.addActionListener(new MainFrame_jButton1_actionAdapter(this)); jButton2.setText("发送信息"); jButton2.addActionListener(new MainFrame_jButton2_actionAdapter(this)); jButton2.setFont(new java.awt.Font("Dialog", 0, 14)); jButton2.setBounds(new Rectangle(380, 61, 104, 28)); jButton3.setBounds(new Rectangle(501, 61, 104, 28)); jButton3.setFont(new java.awt.Font("Dialog", 0, 14)); jButton3.setText("断开连接"); jButton3.addActionListener(new MainFrame_jButton3_actionAdapter(this)); jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); jScrollPane1.setBounds(new Rectangle(11, 101, 274, 188)); jScrollPane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); jScrollPane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); jScrollPane2.setBounds(new Rectangle(312, 104, 291, 186)); contentPane.add(jTextField3, null); contentPane.add(jLabel3, null); contentPane.add(jTextField2, null); contentPane.add(jLabel2, null); contentPane.add(jTextField1, null); contentPane.add(jLabel1, null); contentPane.add(jButton1, null); contentPane.add(jButton2, null); contentPane.add(jButton3, null); contentPane.add(jLabel4, null); contentPane.add(jTextField4, null); contentPane.add(jScrollPane1, null); contentPane.add(jScrollPane2, null); jScrollPane2.getViewport().add(jTextArea1, null); jScrollPane1.getViewport().add(jList1, null); } //Overridden so we can exit when window is closed protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } class ReadMessageThread extends Thread{ public void run(){ String line=""; while(true){ try{ line = cin.readLine(); //从端口读入一条信息 }catch (IOException e){ jTextArea1.append("输入输出异常\n"); } StringTokenizer st=new StringTokenizer(line,":"); String keyword=st.nextToken();//存储关键字,判断消息类型 if (keyword.equalsIgnoreCase("QUIT")){ //服务器同意断开信息 try{ socket.close(); jTextArea1.append("接收到服务器同意断开信息,套接字关闭\n"); }catch (IOException e){ jTextArea1.append("套接字关闭异常\n"); } this.stop(); } else if (keyword.equalsIgnoreCase("PEOPLE")){ //客户列表信息 /*将客户名称分离到Vector中,然后将其显示在下拉列表中*/ Vector imessage=new Vector(); while(st.hasMoreTokens()) imessage.addElement(st.nextToken()); jList1.setListData(imessage); }else{ //接收的是来自服务器的广播信息 //将信息的余下内容全部提取,并去掉首字符(冒号),并显示 String message=st.nextToken("\0"); message=message.substring(1); jTextArea1.append(message+"\n"); } } }} void jButton1_actionPerformed(ActionEvent e) { try { //获取服务器IP InetAddress ip=InetAddress.getByName(jTextField1.getText());int port=Integer.parseInt(jTextField2.getText()); //获取服务器端口 socket= new Socket(ip,port); //与服务器连接 jTextArea1.append("系统提示:与服务器开始连接...... \n"); } catch (IOException e1) { //捕捉可能产生的异常 jTextArea1.append("服务器端口打开出错\n"); } if (socket != null) { //连接成功 jTextArea1.append("系统提示:与服务器连接成功...... \n"); clientName=jTextField3.getText().trim(); //获得客户连接的名称 try { //创建输入流 cin=new BufferedReader(new InputStreamReader(socket.getInputStream())); //创建输出流 cout = new PrintStream(socket.getOutputStream()); //构建客户向服务器发送连接请求的信息,并发送到服务器 String str = "PEOPLE:"+clientName; cout.println(str); //创建读服务器发送信息线程 ReadMessageThread readThread=new ReadMessageThread(); readThread.start(); }catch(IOException e3) { //捕捉可能产生的异常 jTextArea1.append("输入输出异常\n"); } } } void jButton2_actionPerformed(ActionEvent e) { String str=jTextField4.getText(); str="MSG:"+clientName+":"+str; cout.println(str); } void jButton3_actionPerformed(ActionEvent e) { String str="QUIT"; cout.println(str); jTextArea1.append("客户请求断开连接\n"); }}class MainFrame_jButton1_actionAdapter implements java.awt.event.ActionListener { MainFrame adaptee; MainFrame_jButton1_actionAdapter(MainFrame adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jButton1_actionPerformed(e); }}class MainFrame_jButton2_actionAdapter implements java.awt.event.ActionListener { MainFrame adaptee; MainFrame_jButton2_actionAdapter(MainFrame adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jButton2_actionPerformed(e); }}class MainFrame_jButton3_actionAdapter implements java.awt.event.ActionListener { MainFrame adaptee; MainFrame_jButton3_actionAdapter(MainFrame adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jButton3_actionPerformed(e); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -