java中的udp并发不能处理多个客户端

7nbnzgx9  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(574)

这是我的密码:

  1. public class UDPServer implements Runnable{
  2. DatagramSocket socket;
  3. Logger logger;
  4. public UDPServer(DatagramSocket socket, Logger logger) {
  5. this.socket=socket;
  6. this.logger=logger;
  7. }
  8. public static void handleEchoClient(DatagramSocket socket, Logger logger) throws IOException {
  9. int totalBytesEchoed=0;
  10. DatagramPacket packet = new DatagramPacket(new byte[32], 32);
  11. socket.receive(packet);
  12. String s=new String(packet.getData()).trim();
  13. totalBytesEchoed=s.length();
  14. logger.info("Client " + socket.getRemoteSocketAddress() +", echoed " + totalBytesEchoed + " bytes.");
  15. socket.send(packet);
  16. }
  17. public void run() {
  18. try {
  19. handleEchoClient(socket, logger);
  20. } catch (IOException e) {
  21. // TODO Auto-generated catch block
  22. e.printStackTrace();
  23. }
  24. }
  25. public static void main(String[] args) throws IOException{
  26. int servPort = 3444;
  27. DatagramSocket socket = new DatagramSocket(servPort);
  28. DatagramPacket packet = new DatagramPacket(new byte[32], 32);
  29. Executor servis = Executors.newCachedThreadPool();
  30. Logger logger = Logger.getLogger("practical");
  31. servis.execute(new UDPServer(socket, logger));
  32. servis.execute(new UDPServer(socket, logger));
  33. }
  34. }

它只支持一个客户端,但不支持两个客户端。提前谢谢。
忽略这一点:看起来你的帖子大部分都是代码;请添加更多细节。看起来你的帖子大部分是代码;请补充一些细节。

drkbr07n

drkbr07n1#

您只有一个套接字,并且将每个回复发送到该套接字的远程地址。所以你的代码不可能把回复发送到两个不同的地方。
如果要处理多个客户端,则需要跟踪与之通信的各种远程地址,并向相应客户端的远程地址发送回复。

相关问题