gpt4 book ai didi

java - 单线程服务器实现多线程

转载 作者:行者123 更新时间:2023-12-01 11:16:03 25 4
gpt4 key购买 nike

伙计们,我想将我的服务器实现转换为多线程,以便它可以处理多个请求。基本上,服务器与 Android 应用程序连接,并且它正在从 Android 应用程序接收图像。我想添加一个线程,以便它可以处理多个请求,并且该线程应该在收到请求时启动。请帮助我。

这是服务器代码。

public static void main(String[] args) throws UnknownHostException, IOException, MatlabInvocationException, MatlabConnectionException {
while (true) {
try {
serverSocket = new ServerSocket(4001); // Server socket

} catch (IOException e) {
System.out.println("Could not listen on port: 4001");
}
System.out.println("Server started. Listening to the port 4001");

clientSocket = serverSocket.accept();
DataInputStream inputFromClient = new DataInputStream(clientSocket.getInputStream());
int count = inputFromClient.readInt();
int available = inputFromClient.available();
System.out.println("Length of Image in Bytes:" + count);
System.out.println("available:" + available);
image = new byte[count];
inputFromClient.readFully(image);
System.out.println(image.length);
System.out.println(image);
final BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(image));
ImageIO.write(bufferedImage, "jpg", new File("image.jpg"));
System.out.println("Image has been wriiten in the directory.");

MatlabProxyFactory mpf = new MatlabProxyFactory();
MatlabProxy proxy = mpf.getProxy();
proxy.eval("conclusion=DetectColorL");
Object[] obj = proxy.returningEval("conclusion", 1);
String Message = obj[0].toString();
DataOutputStream outTo = new DataOutputStream(clientSocket.getOutputStream());
outTo.writeUTF(Message.toString());
System.out.println(Message);
proxy.disconnect();
serverSocket.close();

最佳答案

为了使其成为多线程,您希望能够同时连接多个客户端,以处理多个请求,而不是一次处理一个请求。

为此,您的服务器必须永久接受新客户端。

public static void main(String[] args) {
ServerSocket serverSocket;

try {
serverSocket = new ServerSocket(4001); // Server socket
System.out.println("Server started. Listening to the port 4001");

while (true) {
// Always accept new clients
Socket clientSocket = serverSocket.accept();
new RequestHandlingClass(clientSocket).start(); // Make a new thread and call it's run procedure
}

} catch (IOException e) {
System.out.println("Could not listen on port: 4001");
}
}

现在我们的服务器接受多个客户端,我们必须实现 RequestHandlingClass 类。您希望该类监听客户端请求并处理它们。

public class RequestHandlingClass() extends Thread {
Socket clientSocket;
DataInputStream inputFromClient;

RequestHandlingClass(Socket clientSocket) {
this.clientSocket = clientSocket;
this.inputFromClient = new DataInputStream(clientSocket.getInputStream());
// ...
}

public void run() {
// Handle client requests
}
}

根据您的问题,我想您想在 run 方法中执行“图像处理”代码。

关于java - 单线程服务器实现多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31811214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com