?? 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 + -