gpt4 book ai didi

java - java多线程服务器中的客户端编号

转载 作者:行者123 更新时间:2023-12-02 07:03:42 24 4
gpt4 key购买 nike

我在我的服务器中使用两个类

Myserver.java

private ExecutorService executorService = Executors.newFixedThreadPool(10);        

public static void main(String[] args) throws IOException {
server = new MyServer();
server.runServer();
}

private void runServer() {
int serverPort = 8071;
try {
System.out.println("Starting Server");
serverSocket = new ServerSocket(serverPort);

while(true) {
System.out.println("Waiting for request");
try {
Socket s = serverSocket.accept();
System.out.println("Processing request");
executorService.submit(new ServiceRequest(s));
} catch(IOException ioe) {
System.out.println("Error accepting connection");
ioe.printStackTrace();
}
}
}catch(IOException e) {
System.out.println("Error starting Server on "+serverPort);
e.printStackTrace();
}
}

ServiceRequest.java

private Socket socket;
BufferedReader input = null;

public ServiceRequest(Socket connection) {
this.socket = connection;
}

public void run() {

try {
//input = new BufferedReader(new InputStreamReader(socket.getInputStream()));


DataInputStream din = new DataInputStream(socket.getInputStream());

System.out.println("Client "+ clientID +"Connected");


我想在run()中获取每个客户端的编号(我想在代码的最后一行获取结果)。我该怎么做?

最佳答案

当您创建新的服务请求时,您可以保留 ID 的全局计数器...但使用 AtomicLong 非常重要。 ,不是常规intlong ,如果你想保留唯一的 ID。

private static AtomicLong idCounter = new AtomicLong();
private long clientId = idCounter.incrementAndGet();

这就是创建 clientId 的方法以线程安全的方式,作为实例变量 clientId每次 ServiceRequest 都会自动创建一个新值已生成。

关于java - java多线程服务器中的客户端编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16342768/

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