【发布时间】:2015-07-23 12:51:53
【问题描述】:
我必须为 Uni 做一个线索游戏,所以我们有一个服务器类和正在连接的客户端。对于每个连接的客户端,我们希望使用正在连接的客户端的套接字启动一个自己的 ServerThread。这个线程只监听传入的消息并告诉服务器类将它们发送回客户端。 问题:每次新客户端连接时,他都会覆盖这个 ServerThread,所以总是只有一个 ServerThread,我们希望每个客户端都有一个。我们在客户端之间发送 JSON 消息,现在 ServerThread 中的接收消息仅从最后连接的套接字读取。我该如何解决这个问题?我在服务器中添加了我的接受方法,我想错误在那里,但可能在任何地方。谢谢你的帮助! 毛里求斯
服务器
public void accept() throws IOException{
while(true){
Socket socket = serverSocket.accept();
Runnable r = new ServerThreadHandler(socket);
Thread t = new Thread(r);
t.start();
}
}
ServerThreadHandler:
public class ServerThreadHandler implements Runnable {
static Socket socket=null;
protected User client;
//private static int i;
private static BufferedReader in;
private static OutputStreamWriter out;
public void createUser(String nick, String group, String[] ext) throws IOException{
client = new User(nick, group, ext, null, false, 0, false, socket, socket.getPort());
}
/**
* constructor-Method
* @param socketS
*/
ServerThreadHandler(Socket socketS){
socket = socketS;
}
public void run(){
Server.setThreadList(socket);
in = createReader();
out = createWriter();
//and so on...
}
}
【问题讨论】:
-
胡乱猜测,
ServerThreadHandler中是否有可用的static? -
公共类 ServerThreadHandler 实现 Runnable { static Socket socket=null;受保护的静态用户客户端;
-
摆脱静态,应该可以解决你的问题:)
-
protected static User client;--->protected User client; -
感谢您的帮助!我尝试这样做,但我在 ServerthreadHandler 中有一个 createUser 方法,该方法在另一个类中调用,因此它必须是静态的,或者是否有另一种方法可以调用另一个类中的方法。那里还有一些读者和作家。为了得到它们,它们需要是静态的,不是吗?
标签: java multithreading sockets server overwrite