📄 mainframe.java
字号:
package multiserver;
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();
JButton jButton1 = new JButton();
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea jTextArea1 = new JTextArea();
ServerSocket server=null; //server成员变量的作用是用来打开服务器的端口
ConnectSocket csocket=null;
Socket socket=null;
//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("监听端口");
jLabel1.setBounds(new Rectangle(25, 21, 75, 28));
contentPane.setLayout(null);
this.setSize(new Dimension(388, 328));
this.setTitle("多客户信息交互系统-服务器端");
jTextField1.setFont(new java.awt.Font("Dialog", 0, 16));
jTextField1.setText("6544");
jTextField1.setBounds(new Rectangle(102, 21, 133, 28));
jButton1.setBounds(new Rectangle(251, 21, 111, 28));
jButton1.setFont(new java.awt.Font("Dialog", 0, 16));
jButton1.setText("开始监听");
jButton1.addActionListener(new MainFrame_jButton1_actionAdapter(this));
jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane1.setBounds(new Rectangle(20, 58, 343, 222));
jTextArea1.setText("");
contentPane.add(jLabel1, null);
contentPane.add(jTextField1, null);
contentPane.add(jButton1, 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 {
/*打开服务器端口*/
server = new ServerSocket(Integer.parseInt(jTextField1.getText()));
/*添加提示信息*/
jTextArea1.append("系统提示:聊天服务器系统开始启动...... \n");
} catch (IOException e1) { //捕捉打开端口时可能产生的异常
jTextArea1.append("服务器端口打开出错\n");
}
if (server != null){ //如果端口打开成功
csocket = new ConnectSocket();
csocket.start();
}
}
class ReadMessageThread extends Thread{
BufferedReader cin; //输入流成员变量
PrintStream cout; //输出流成员变量
Socket socket; //套接字成员变量
/*构造器方法,实现从用户连接线程中获得套接字,
并利用该套接字实现输入流和输出流的建立*/
ReadMessageThread(Socket socket){
this.socket=socket;
try{
cin=new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
cout = new PrintStream(this.socket.getOutputStream());
}catch(IOException e){
jTextArea1.append("输入输出流建立异常\n");
}
}
public void run(){
String str="";
while(true){
try{
str = cin.readLine();
cout.println("服务器已接收到你发来的信息:"+str);
}catch (IOException e){
jTextArea1.append("输入输出异常\n");
}
if (str.equals("QUIT")){
try{
socket.close();
jTextArea1.append("客户连接关闭\n");
}catch (IOException e){
jTextArea1.append("套接字关闭异常\n");
}
break;
} else
jTextArea1.append("从客户端读入如下的信息:"+str+"\n");
}
}
}
class ConnectSocket extends Thread{
public void run(){ //将多用户连接过程在run方法中实现
while(true){ //多个客户连接循环
try{
socket = server.accept(); //等待客户连接
}catch (IOException e){
jTextArea1.append("用户连接服务器出错\n");
}
if (socket!=null){
//创建收发信息线程对象
ReadMessageThread readThread=new ReadMessageThread(socket);
//激活线程
readThread.start();
}
}
}
}
}
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);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -