?? serverthread.java
字號:
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;
class ServerThread extends Thread //服務器主線程
{
int sPort0,sPort1; //服務器接口
ServerSocket sSocket0,sSocket1; //服務器插座
ServerFrame frame;
BroadCastInstant BCI;
TextArea sStatus;
Vector Clients; //儲存聯機客戶端
Vector messages; //儲存客戶端訊息
Vector messages1; //在線人員
Vector ptpmessage;
BroadCast BroadCastWriter; //廣播訊息線程
CleanDeadConnect Cleaner; //清除中斷聯機線程
UDPServer udpServer;
public ServerThread(ServerFrame f)
{
Clients = new Vector(); //建立Vector實體
messages = new Vector(); //建立Vector實體
messages1 = new Vector(); //建立Vector實體
ptpmessage = new Vector(); //建立Vector實體
// messages1.addElement("0");
messages1.addElement("end"); //作為消息的結束
try
{
sPort0 = 8000;sPort1= 8001; //指定接口
sSocket0 = new ServerSocket(sPort0); //建立服務器插座
sSocket1 = new ServerSocket(sPort1);
}
catch(IOException E) //建立失敗的話...
{
System.out.println("發生異常: " + E);
System.out.println("無法建立服務器插座!!");
System.exit(1); //結束程序
}
this.frame = f;
sStatus = frame.ServerStatus;
sStatus.append("==============================================ICQ服務器已啟動======================================\n\n");
sStatus.append("==================================================等待聯機=========================================\n\n");
BroadCastWriter = new BroadCast(this); //建立廣播線程
BroadCastWriter.start(); //啟動
Cleaner = new CleanDeadConnect(this); //建立清除中斷聯機線程
Cleaner.start(); //啟動
udpServer=new UDPServer();
udpServer.run();
// try {
// udpServer.run();
// } catch (IOException e) {
// System.out.println ("IOException occurred with socket.");
// System.out.println (e);
// System.exit(1);
// }
// if(udpServer.getReceiveMsg()!=null)
// ptpmessage.addElement(udpServer.getReceiveMsg() );
}
public void run()
{
while(true) //等待建立聯機的循環
{
try
{
Socket cSocket0 = sSocket0.accept(); //等待聯機
Socket cSocket1 = sSocket1.accept();
//若聯機成功則建立可用來和客戶端溝通的線程
ClientThread cThread = new ClientThread(cSocket0,cSocket1,this);
cThread.start(); //啟動線程
//在服務器窗口中加入聯機訊息
sStatus.append(cThread.getClientName() + ":");
sStatus.append(cThread.getClientAddress() + "已聯機 ");
sStatus.append("目前聯機數: " + ClientThread.ConnectNumber +
"\n");
synchronized(Clients) //同步處理
{
Clients.addElement(cThread); //加入Vector
}
// messages1.setElementAt(ClientThread.ConnectNumber, 1);//修改第一個值(人數)
BCI=new BroadCastInstant(this);
}
catch(IOException E) //發生異常的話
{
System.out.println("發生異常: " + E);
System.out.println("建立客戶端聯機失敗!");
System.exit(2); //離開程序
}
}
}
public void finalize()
{
try
{
sSocket0.close(); //關閉服務器程序聯機
sSocket1.close();
}
catch(IOException E){}
sSocket0 = null; //釋放資源
sSocket1 = null;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -