【发布时间】:2014-01-22 04:44:03
【问题描述】:
Server.java:
private Socket connection;
private int ID;
public static void main(String[] args) {
int port = 19999;
int count = 0;
try{
ServerSocket socket1 = new ServerSocket(port);
System.out.println("Server Initialized");
while (true) {
Socket connection = socket1.accept();
Runnable runnable = new Server(connection, ++count);
Thread thread = new Thread(runnable);
thread.start();
}
}
catch (Exception e) {}
}
Server(Socket s, int i) {
this.connection = s;
this.ID = i;//could use a client name as it is individual id for each thread.?
}
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
PrintWriter out = new PrintWriter(connection.getOutputStream(), true);
String inputLine;
while ((inputLine = in.readLine()) != null) {
Process p = new Process();
String output = p.input(inputLine);
out.println(output);
}
}
}
catch (Exception e) {
System.out.println(e);
}
finally {
try {
connection.close();
}
catch (IOException e){}
}
}
}
在运行时它会创建一个服务器,当客户端连接到该服务器时,它会为其创建一个线程,以便它可以同时处理多个客户端。
但是代码:
while ((inputLine = in.readLine()) != null) {
Process p = new Process();
String output = p.input(inputLine);
out.println(output);
}
循环 BufferedReader 以获取客户端提供的所有输入。当接收到时处理它,然后将回复发送回客户端进行打印。
我怎样才能得到它,以便我可以在第一个问题的同时通过客户端发送/获取另一个问题?
例如
“用户:你好,计算机,你好吗?” “电脑:我很好,你好吗?” “用户:我很好” “计算机:很高兴听到”
工作正常。但是:
"用户:是 1+1?" “电脑:1+1=2” “电脑:还有问题吗?” “用户:好吗?”
没有。
如何做到这一点,以便服务器给出多个答案,而不必等待另一个输入?
如果我在 server.java 中将输出设置为字符串,这很容易做到,但是每次我尝试访问字符串来更改它时
(通过使用Server s = new Server(); s.output = "stuff";)正如代码所示,它只是创建了一个新的线程服务器。如何访问已经创建的线程?
【问题讨论】:
标签: java multithreading sockets