【发布时间】:2015-03-17 10:04:00
【问题描述】:
我似乎不知道如何通知我的服务器类连接丢失。我的服务器代码是:
public class Server {
static int port = 4444;
static boolean listening = true;
static ArrayList<Thread>Clients = new ArrayList<Thread>();
static MatchMaker arena;
public static void main(String[] args) {
Initialize();
Thread startConnections = new Thread(run());
startConnections.start();
}
private static Runnable run(){
System.out.println("(" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + ") Started listening on port: " + port);
try(ServerSocket socket = new ServerSocket(port)){
while(listening){
if(Clients.size() <= 4){
Socket clientSocket = socket.accept();
MultiThread connection = new MultiThread(clientSocket, arena, );
Clients.add(connection);
System.out.println("Client connected from " + clientSocket.getRemoteSocketAddress() + " Assigned ID: " + connection.getId());
System.out.println("Currently connected clients(" + Clients.size() + "): ");
for(int i = 0; i < Clients.size(); i++)
System.out.println(" - " + Clients.get(i).getId());
connection.start();
}
}
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
private static void Initialize(){
arena = new MatchMaker();
}
}
这里的问题是,由于此类跟踪已连接的客户端,因此我希望它在客户端丢失连接时通知它。 MultiThread 类已经具有检测丢失连接的客户端的功能方法,但是我不知道如何将该信息传递回 Server 类。我尝试将服务器类作为参数传递给 MultiThread,但它说我不能以静态方式使用“this”。
【问题讨论】:
-
顺便说一句,在
main中,您的代码根本没有启动新线程并且已损坏。你可以直接调用run()而不是这段代码。 -
Server中没有代码应该处理有关断开连接的通知。
标签: java multithreading server