?? serverthread.java
字號(hào):
package XXRoom;
import java.io.*;
import java.net.*;
import java.util.List;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.swing.JOptionPane;
import java.util.*;
/*用來等待用戶聯(lián)機(jī)*/
class ServerThread extends Thread
{
List messages = new ArrayList();//信息列表
List clients = new ArrayList();//客戶端線程
ServerFrame sFrm;//服務(wù)器
//等待用戶聯(lián)機(jī)的TCP
ServerSocket sSocket;
//向所有用戶發(fā)送消息的UDP
DatagramSocket dSocket;
ListenThread lThread;
Broadcast bThread;
MonitorThread mThread;
public ServerThread( ServerFrame sFrm )
{
this.sFrm = sFrm;
this.sSocket = sFrm.sSocket;
this.dSocket = sFrm.dSocket;
//開始監(jiān)聽線程
lThread = new ListenThread( this );
lThread.start();
//開始廣播線程
bThread = new Broadcast( this );
bThread.start();
mThread = new MonitorThread();
mThread.start();
}
public void run()
{
while( true )
{
try
{
Socket skt = sSocket.accept();
try
{
ClientThread cThread = new ClientThread( this, skt );
cThread.start();
synchronized( clients )
{
clients.add( cThread );
}
}
catch ( IOException er )
{
er.printStackTrace();
continue;
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
}
public void dispose()
{
lThread.stop();
bThread.stop();
mThread.stop();
lThread.dispose();
bThread.dispose();
mThread.dispose();
messages.add( "QUIT SERVER" );
for( int i = 0; i < clients.size(); i ++ ) {
for( int j = 0; j < messages.size(); j ++ ) {
((ClientThread)clients.get( i )).write.println( messages.get( j ) );
}
}
for( int i = 0; i < clients.size(); i ++ ) {
((ClientThread)clients.get( i )).stop();
((ClientThread)clients.get( i )).dispose();
}
clients.clear();
messages.clear();
sFrm = null;
dSocket = null;
sSocket = null;
clients = null;
messages = null;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -