📄 mainframe.java
字号:
package multiclient;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.*; //引入网络包,以实现套接字连接import java.io.*; //引入输入输出流包,以进行数据的读写/** * <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 { JPanel contentPane; JLabel jLabel1 = new JLabel(); JTextField jTextField1 = new JTextField(); JLabel jLabel2 = new JLabel(); JTextField jTextField2 = new JTextField(); JButton jButton1 = new JButton(); JButton jButton2 = new JButton(); JTextField jTextField3 = new JTextField(); JScrollPane jScrollPane1 = new JScrollPane(); JTextArea jTextArea1 = new JTextArea(); Socket socket; BufferedReader cin; PrintStream cout; //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, 16)); jLabel1.setText("服务器IP"); jLabel1.setBounds(new Rectangle(21, 17, 68, 32)); contentPane.setLayout(null); this.setSize(new Dimension(453, 323)); this.setTitle("多客户信息交互系统-客户端"); jTextField1.setFont(new java.awt.Font("Dialog", 0, 16)); jTextField1.setText("127.0.0.1"); jTextField1.setBounds(new Rectangle(92, 17, 105, 32)); jLabel2.setBounds(new Rectangle(206, 17, 42, 32)); jLabel2.setText("端口"); jLabel2.setFont(new java.awt.Font("Dialog", 0, 16)); jTextField2.setBounds(new Rectangle(241, 17, 60, 32)); jTextField2.setText("6544"); jTextField2.setFont(new java.awt.Font("Dialog", 0, 16)); jButton1.setBounds(new Rectangle(320, 17, 114, 32)); jButton1.setFont(new java.awt.Font("Dialog", 0, 16)); 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, 16)); jButton2.setBounds(new Rectangle(320, 65, 114, 32)); jTextField3.setBounds(new Rectangle(20, 63, 279, 32)); jTextField3.setText("Hello,everybody"); jTextField3.setFont(new java.awt.Font("Dialog", 0, 16)); jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); jScrollPane1.setBounds(new Rectangle(21, 101, 411, 186)); jTextArea1.setText(""); contentPane.add(jLabel1, null); contentPane.add(jTextField1, null); contentPane.add(jTextField2, null); contentPane.add(jLabel2, null); contentPane.add(jButton1, null); contentPane.add(jButton2, null); contentPane.add(jTextField3, null); contentPane.add(jScrollPane1, null); jScrollPane1.getViewport().add(jTextArea1, 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); } } 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) { //套接字建立成功 try { cin=new BufferedReader(new InputStreamReader(socket.getInputStream())); cout = new PrintStream(socket.getOutputStream()); /*构建发送信息*/ String str = "来自"+InetAddress.getLocalHost().toString()+"的连接信息"; /*将信息发送到服务器*/ cout.println(str); jTextArea1.append("向服务器发送如下的信息:"+str+"\n"); ReadMessageThread readThread=new ReadMessageThread(); /*通过start方法,让线程进入可运行状态*/ readThread.start(); }catch(IOException e3) { //捕捉可能产生的异常 jTextArea1.append("输入输出异常\n"); } } } void jButton2_actionPerformed(ActionEvent e) { String str=jTextField3.getText(); jTextArea1.append("向服务器发送如下的信息:"+str+"\n"); cout.println(str); } class ReadMessageThread extends Thread{ /*覆盖Thread类的run方法,在该方法中,循环从端口读入信息, 直到读入“QUIT”,则关闭套接字*/ public void run(){ String str=""; while(true){ try{ str = cin.readLine(); //读入信息 }catch (IOException e){ jTextArea1.append("输入输出异常\n"); } if (str.equals("QUIT")){ //若为“QUIT”,则关闭套接字,跳出循环 try{ socket.close(); jTextArea1.append("用户连接已关闭\n"); }catch (IOException e){ jTextArea1.append("套接字关闭异常\n"); } break; } else //不是QUIT信息,则将读入的信息进行显示 jTextArea1.append("从服务器端读入如下的信息:"+str+"\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); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -