我遇到多线程服务器的问题。我想将多个客户端连接到此服务器,但我不知道如何在新线程中提供所有参数。
import java.net.*;
import java.io.*;
class AffableThread extends Thread implements Runnable
{
public Socket client;
public AffableThread(Socket client) {
PrintWriter out = null;
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(),true);
String input, output;
while ((input = in.readLine()) != null) {
if (input.equalsIgnoreCase("exit")) {
break;
}
out.println("Server:" + input);
System.out.println(input);
}
out.close();
in.close();
client.close();
}
}
public class Server {
static AffableThread mSecondThread;
public static void main(String[] args) {
try{
ServerSocket server = null;
Socket client;
server = new ServerSocket(1234);
client = server.accept();
System.out.println("wait");
String abc = "13";
Runnable r = new AffableThread(client);
server.close();
System.out.println("Server closed");
} catch(Exception e){
System.out.println(e.getMessage());
}
}
}
这是一个日志
Server.java:15: error: unreported exception IOException; must be caught or declared to be thrown
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
^
Server.java:16: error: unreported exception IOException; must be caught or declared to be thrown
out = new PrintWriter(client.getOutputStream(),true);
^
Server.java:18: error: unreported exception IOException; must be caught or declared to be thrown
while ((input = in.readLine()) != null) {
^
Server.java:28: error: unreported exception IOException; must be caught or declared to be thrown
in.close();
^
Server.java:29: error: unreported exception IOException; must be caught or declared to be thrown
client.close();
^
5 errors
如何解决这个问题?
答案 0 :(得分:0)
您似乎在构造函数中嵌入了所有run
逻辑。显然,这实际上不会在新线程中运行,而是需要类似这样的东西
class AffableThread extends Thread implements Runnable {
private final Socket client;
public AffableThread(Socket client) {
this.client = client;
}
@Override
public void run() {
PrintWriter out = null;
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(
client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
String input, output;
while ((input = in.readLine()) != null) {
if (input.equalsIgnoreCase("exit")) {
break;
}
out.println("Server:" + input);
System.out.println(input);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
out.flush();
out.close();
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
然后,在你的main方法中启动线程;像这样
Runnable r = new AffableThread(client);
r.start(); // <-- Start the thread executing.