📄 serverthread.java
字号:
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.*;
/*用来等待用户联机*/
class ServerThread extends Thread
{
List messages = new ArrayList();//信息列表
List clients = new ArrayList();//客户端线程
ServerFrame sFrm;//服务器
//等待用户联机的TCP
ServerSocket sSocket;
//向所有用户发送消息的UDP
DatagramSocket dSocket;
ListenThread lThread;
Broadcast bThread;
MonitorThread mThread;
public ServerThread( ServerFrame sFrm )
{
this.sFrm = sFrm;
this.sSocket = sFrm.sSocket;
this.dSocket = sFrm.dSocket;
//开始监听线程
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;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -