我遵循了一些教程,并了解了如何将线程用于多线程套接字服务器。我已经为客户端创建了一个具有ClientServiceThread类的Server类。当线程从客户端收到消息时,如何使用Server类访问该信息?
这是我的服务器主题:
public void run(){
game = new Game();
try{
serverSocket = new ServerSocket(port);
System.out.println("Server Started");
}
catch (IOException e){
System.out.println(e);
}
while(true) {
try {
Socket clientSocket = serverSocket.accept();
ClientServiceThread cliThread = new ClientServiceThread(clientSocket);
threads.add(cliThread);
cliThread.start();
} catch(IOException e) {
e.printStackTrace();
}
}
}
这是我的ClientServiceThread类:
public void run() {
boolean m_bRunThread = true;
System.out.println("Accepted Client Address - " + socket.getInetAddress().getHostAddress());
try {
out = new ObjectOutputStream(socket.getOutputStream());
in = new ObjectInputStream(socket.getInputStream());
while(m_bRunThread) {
String clientCommand = in.readUTF();
System.out.println("Client Says :" + clientCommand);
if(!gameStarted) {
out.writeUTF("GAME_ALREADY_STARTED");
out.flush();
}
}
} catch(Exception e) {
e.printStackTrace();
}
}
编辑1:基本上,我正在监听客户端处理程序线程上的命令/消息。我后来想把它们处理到我的服务器中,这样我就可以通过它操纵我的Game对象了。
答案 0 :(得分:0)
我建议的方法是将游戏对象传递给客户端线程(它必须是线程安全的!),然后让客户端线程直接对游戏对象执行操作。这将简化您的服务器类,并为您提供一个处理传入消息的位置。