【发布时间】:2015-10-22 05:39:41
【问题描述】:
(声明部分代码与在线教程相似)
我想我已经做到了,以便我的服务器可以使用线程一次处理多个请求,但我不完全确定。最重要的是,我不知道我将如何一次发送多个请求。
我的目标是并行运行我的客户端代码多次,看看如果多个客户端同时连接到服务器会发生什么。
客户端代码(在单独的项目包中):
Client clientSocket = new Client(9990,"localhost");
Socket socket = new Socket(clientSocket.host,clientSocket.portNumber);
clientSocket.performTask(socket);
("performTask(socket)" 向服务器发送数据以执行任务)
服务器代码(将项目包与客户端代码分开):
Server server = new Server(9990);
int clientNumber = 0;
ServerSocket socket = new ServerSocket(server.portNumber);
try {
while (true) {
new ServerHandler(socket.accept(),clientNumber).go();
clientNumber++;
}
}
finally {
socket.close();
}
}
ServerHandler 类(与服务器代码相同的项目包):
public class ServerHandler extends Thread {
private static Socket socket;
private static int clientNumber;
public ServerHandler(Socket socket, int clientNumber) {
ServerHandler.socket = socket;
ServerHandler.clientNumber = clientNumber;
}
public void go() {
while(true) {
try {
//do calculation, do server tasks, etc.
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
所以当客户端连接到服务器时,服务器会实现 ServerHandler 类来进行必要的计算:这样做的想法是多个客户端可以同时连接。
所以我的问题分为两部分:
(1) 我是否设置了我的程序以允许多线程,或者我在此过程中的某个地方犯了错误? (例如,有人告诉我我需要在某处使用“Runnable”来使用多线程,但我注意到我没有)
(2) 在修复我的代码以允许多线程之后,我将如何实际使用它来让我并行运行我的客户端代码?
【问题讨论】:
标签: java multithreading sockets parallel-processing client-server