?? serverthread.java
字號:
package serverframe;import java.io.*;import java.awt.*;import java.net.*;import java.util.*;import java.awt.event.*;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2006</p> * <p>Company: </p> * @author not attributable * @version 1.0 */import javax.swing.*;class ServerThread extends Thread{ int sPort; ServerSocket sSocket; ServerFrame frame; JTextArea sStatus; Vector Clients;//一可變動數組用來存儲客戶端線程 Vector messages;//存儲客戶端消息 Vector system; BroadCast BroadCastWriter;//廣播線程 CleanDeadConnect Cleaner;//清除不可用的線程 public ServerThread(ServerFrame f) { Clients = new Vector();//實例化Vctor messages = new Vector(); system=new Vector(); try { sPort = 7000; sSocket = new ServerSocket(sPort);//建立服務器端口,服務器將在此端口監聽 } catch(IOException E) { System.out.println("發生例外: " + E); System.out.println("無法建立服務器端口!!"); System.exit(1); } this.frame = f; sStatus = frame.ServerStatus;//讓窗體的文本顯示處是在同一地方;該處的文本顯示處和serverframe是同一地方 sStatus.append("游戲服務器已啟動..\n\n"); sStatus.append(">>>>>等待連線<<<<<\n\n"); BroadCastWriter = new BroadCast(this); BroadCastWriter.start();//開啟廣播線程 Cleaner = new CleanDeadConnect(this); Cleaner.start();//開啟清除不可用線程 } public void run() { while(true) { try { Socket cSocket = sSocket.accept();//監聽客戶機是否連機 ClientThread cThread = new ClientThread(cSocket,this);//實例化clientthread cThread.start();//如果連機就開啟一線程來處理該客戶機 sStatus.append(cThread.getClientName() + ":"); sStatus.append(cThread.getClientAddress() + "已連線 "); sStatus.append("目前連線數: " + ClientThread.ConnectNumber +"\n");//顯示連機狀態 synchronized(Clients)//瑣住內存防止出錯 { Clients.addElement(cThread);//把cThread加入Clients中并把clients尾,并把clients加一 } } catch(IOException E) { System.out.println("發生例外: " + E); System.out.println("建立客戶端連線失敗!"); System.exit(2); } } } public void finalize()//關閉該sSocket { try { sSocket.close(); } catch(IOException E){} sSocket = null; }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -