?? mainframe.java~29~
字號:
package multiservernew;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.DebugGraphics;
import com.borland.jbcl.layout.XYLayout;
import com.borland.jbcl.layout.*;
import javax.swing.JLabel;
import java.awt.Rectangle;
import javax.swing.BorderFactory;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.Border;
import java.net.*;
import java.io.*;
import java.util.Vector;
import java.util.StringTokenizer;
import java.math.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class MainFrame extends JFrame {
ServerSocket server = null;
ConnectSocket connect = null;
static Vector clients = new Vector();
JPanel contentPane;
JMenuBar jMenuBar1 = new JMenuBar();
JMenu jMenuFile = new JMenu();
JMenuItem jMenuFileExit = new JMenuItem();
JMenu jMenuHelp = new JMenu();
JMenuItem jMenuHelpAbout = new JMenuItem();
JLabel jLabel1 = new JLabel();
JTextField jTextField1 = new JTextField();
JButton jButton1 = new JButton();
JPanel jPanel1 = new JPanel();
BorderLayout borderLayout1 = new BorderLayout();
TitledBorder titledBorder1 = new TitledBorder("");
TitledBorder titledBorder2 = new TitledBorder("");
JScrollPane jScrollPane1 = new JScrollPane();
Border border1 = BorderFactory.createEtchedBorder(EtchedBorder.RAISED,
Color.white, new Color(148, 145, 140));
Border border2 = new TitledBorder(border1, "連接信息");
JTextArea jTextArea1 = new JTextArea();
JPanel jPanel2 = new JPanel();
Border border3 = BorderFactory.createEtchedBorder(EtchedBorder.RAISED,
Color.white, new Color(148, 145, 140));
Border border4 = new TitledBorder(border3, "系統(tǒng)信息");
BorderLayout borderLayout2 = new BorderLayout();
JScrollPane jScrollPane2 = new JScrollPane();
JTextArea jTextArea2 = new JTextArea();
public MainFrame() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
border4 = new TitledBorder(BorderFactory.createEtchedBorder(
EtchedBorder.RAISED, Color.white, new Color(148, 145, 140)),
"系統(tǒng)信息");
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(500, 450));
setTitle("Frame Title");
jMenuFile.setText("File");
jMenuFileExit.setText("Exit");
jMenuFileExit.addActionListener(new
MainFrame_jMenuFileExit_ActionAdapter(this));
jMenuHelp.setText("Help");
jMenuHelpAbout.setText("About");
jMenuHelpAbout.addActionListener(new
MainFrame_jMenuHelpAbout_ActionAdapter(this));
contentPane.setDebugGraphicsOptions(0);
contentPane.setToolTipText("");
jLabel1.setBorder(BorderFactory.createEtchedBorder());
jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
jLabel1.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel1.setText("監(jiān)聽端口");
jLabel1.setBounds(new Rectangle(39, 29, 98, 31));
jTextField1.setBorder(BorderFactory.createLoweredBevelBorder());
jTextField1.setBounds(new Rectangle(197, 29, 95, 31));
jButton1.setBounds(new Rectangle(350, 32, 114, 30));
jButton1.setText("開始監(jiān)聽");
jButton1.addActionListener(new MainFrame_jButton1_actionAdapter(this));
jPanel1.setBorder(border4);
jPanel1.setToolTipText("");
jPanel1.setBounds(new Rectangle(39, 97, 425, 161));
jPanel1.setLayout(borderLayout1);
jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.
HORIZONTAL_SCROLLBAR_ALWAYS);
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.
VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane1.setBorder(BorderFactory.createLoweredBevelBorder());
jPanel2.setBorder(border4);
jPanel2.setBounds(new Rectangle(39, 270, 424, 108));
jPanel2.setLayout(borderLayout2);
jScrollPane2.setHorizontalScrollBarPolicy(JScrollPane.
HORIZONTAL_SCROLLBAR_ALWAYS);
jScrollPane2.setVerticalScrollBarPolicy(JScrollPane.
VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane2.setBorder(BorderFactory.createLoweredBevelBorder());
jTextArea1.setEditable(false);
jTextArea2.setEditable(false);
jMenuBar1.add(jMenuFile);
jMenuFile.add(jMenuFileExit);
jMenuBar1.add(jMenuHelp);
jMenuHelp.add(jMenuHelpAbout);
contentPane.add(jLabel1);
contentPane.add(jButton1);
contentPane.add(jTextField1);
contentPane.add(jPanel1);
jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);
contentPane.add(jPanel2);
jPanel2.add(jScrollPane2, java.awt.BorderLayout.CENTER);
jScrollPane2.getViewport().add(jTextArea2);
jScrollPane1.getViewport().add(jTextArea1);
setJMenuBar(jMenuBar1);
}
/**
* File | Exit action performed.
*
* @param actionEvent ActionEvent
*/
void jMenuFileExit_actionPerformed(ActionEvent actionEvent) {
System.exit(0);
}
/**
* Help | About action performed.
*
* @param actionEvent ActionEvent
*/
void jMenuHelpAbout_actionPerformed(ActionEvent actionEvent) {
MainFrame_AboutBox dlg = new MainFrame_AboutBox(this);
Dimension dlgSize = dlg.getPreferredSize();
Dimension frmSize = getSize();
Point loc = getLocation();
dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x,
(frmSize.height - dlgSize.height) / 2 + loc.y);
dlg.setModal(true);
dlg.pack();
dlg.setVisible(true);
}
class ConnectSocket extends Thread{
Socket socket;
public void run(){
while(true){
try{
socket = server.accept();
}catch(IOException e2){
jTextArea1.append("客戶連接失敗\n");
}
Client c = new Client(socket);
clients.addElement(c);
if(checkName(c)){
c.start();
notifyRoom();
}else{
disconnect(c);
}
}
}
}
class Client extends Thread{
String name;
BufferedReader dis;
PrintStream ps;
Socket socket;
InetAddress ip;
public Client(Socket s){
socket = s;
try{
ip=s.getInetAddress();
// System.out.println(ip.toString());
dis = new BufferedReader(new InputStreamReader(socket.getInputStream()));
ps = new PrintStream(socket.getOutputStream());
String info = dis.readLine();
StringTokenizer stinfo = new StringTokenizer(info,":");
String head = stinfo.nextToken();
name = stinfo.nextToken();
jTextArea1.append("系統(tǒng)消息"+name+"已經連接\n");
}catch(IOException e){
jTextArea2.append("系統(tǒng)消息:用戶連接出錯\n");
}
}
public void send(String msg){
ps.println(msg);
ps.flush();
}
public void run(){
while(true){
String line = null;
try{
line = dis.readLine();
}catch(IOException e){
jTextArea2.append("系統(tǒng)消息:讀客戶信息出錯");
disconnect(this);
notifyRoom();
return;
}
StringTokenizer st = new StringTokenizer(line,":");
String keyword = st.nextToken();
if(keyword.equalsIgnoreCase("MSG")){
sendClients(line);
}else if(keyword.equalsIgnoreCase("QUIT")){
send("QUIT");
disconnect(this);
notifyRoom();
this.stop();
}else if(keyword.equalsIgnoreCase("ConnectionRequest")){
jTextArea2.append(line);
sendClients(line);
}else if(keyword.equalsIgnoreCase("Connection")){
if(st.nextToken().equalsIgnoreCase("同意")){
int n = (int)(Math.random()*5000+2000);
String ip1 = st.nextToken();
String ip2 = st.nextToken();
String dk = String.valueOf(n);
String stry;
stry = "ConnectionYes:"+ip1+":"+ip2+":"+n;
sendClients(stry);
}
if(st.nextToken().equalsIgnoreCase("拒絕")){
String ip1 = st.nextToken();
String ip2 = st.nextToken();
String strn;
strn = "ConnectionNo:"+ip1+":"+ip2;
sendClients(strn);
}
}
}
}
}
public boolean checkName(Client newClient){
for(int i=0;i<clients.size();i++){
Client c = (Client)clients.elementAt(i);
if((c!= newClient)&&(c.name).equals(newClient.name))
return false;
}
return true;
}
public void notifyRoom(){
String people = "PEOPLE";
for(int i=0;i<clients.size();i++){
Client c = (Client)clients.elementAt(i);
people += ":"+c.name+c.ip.toString();
}
sendClients(people);
}
public void sendClients(String msg){
for(int i =0;i<clients.size();i++){
Client c =(Client)clients.elementAt(i);
c.send(msg);
}
}
public void disconnect(Client c){
try{
jTextArea1.append(c.name+"斷開連接\n");
c.send("QUIT");
clients.removeElement(c);
c.socket.close();
}catch(IOException e){
jTextArea2.append("客戶斷開錯誤\n");
}
}
public void jButton1_actionPerformed(ActionEvent actionEvent) {
try{
server = new ServerSocket(Integer.parseInt(jTextField1.getText()));
jTextArea2.append("系統(tǒng)提示:聊天服務器系統(tǒng)開始啟動 ......\n");
}catch(IOException e1){
jTextArea2.append("服務器端口打開出錯\n");
}
if(server !=null){
ConnectSocket connect = new ConnectSocket();
connect.start();
}
}
}
class MainFrame_jButton1_actionAdapter implements ActionListener {
private MainFrame adaptee;
MainFrame_jButton1_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent actionEvent) {
adaptee.jButton1_actionPerformed(actionEvent);
}
}
class MainFrame_jMenuFileExit_ActionAdapter implements ActionListener {
MainFrame adaptee;
MainFrame_jMenuFileExit_ActionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent actionEvent) {
adaptee.jMenuFileExit_actionPerformed(actionEvent);
}
}
class MainFrame_jMenuHelpAbout_ActionAdapter implements ActionListener {
MainFrame adaptee;
MainFrame_jMenuHelpAbout_ActionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent actionEvent) {
adaptee.jMenuHelpAbout_actionPerformed(actionEvent);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -