Java多播客户端-服务器聊天仅支持单客户端连接问题求助
多客户端单服务器聊天程序连接问题及解决方法
问题描述
我是Java网络编程领域的新手,正在尝试实现一个多客户端单服务器的聊天程序,但发现同一时间仅能有一个客户端连接到服务器,连接第二个客户端时会抛出java.net.BindException错误。
相关代码
MainClient
package Multicast; import java.io.BufferedReader; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class MainClient { public static void main(String[] args) { try (Socket socket = new Socket("localhost", 5000)){ BufferedReader input = new BufferedReader(new java.io.InputStreamReader(socket.getInputStream())); PrintWriter output = new PrintWriter(socket.getOutputStream(), true); Scanner scanner = new Scanner(System.in); String userInput; String reponse; String clientName = "none"; ClientThread clientThread = new ClientThread(socket); clientThread.start(); do { if(clientName.equals("none")) { System.out.println("please enter your name"); userInput = scanner.nextLine(); clientName = userInput; output.println(userInput); } else { String message = ("|"+clientName +"| :"); //System.out.println(message); userInput = scanner.nextLine(); output.println(message + " " + userInput); if (userInput.equals("exit")) { break; } } }while (!userInput.equals("exit")); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
ClientThread
package Multicast; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; public class ClientThread extends Thread{ private Socket socket; private BufferedReader input; public ClientThread(Socket s) throws IOException { this.socket = s; this.input = new BufferedReader(new InputStreamReader(socket.getInputStream())); } @Override public void run() { try { while(true) { String reponse = input.readLine(); System.out.println(reponse); } } catch(IOException e){ e.printStackTrace(); } finally { try { input.close(); } catch(Exception e) { e.printStackTrace(); } } } }
原MainServer代码
package Multicast; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; public class MainServeur { public static void main(String[] args) { ArrayList<ServerThread> threadList = new ArrayList<>(); try(ServerSocket serverSocket = new ServerSocket(5000)){ Socket socket = serverSocket.accept(); ServerThread serverThread= new ServerThread(socket, threadList); threadList.add(serverThread); serverThread.start(); } catch (IOException e) { e.printStackTrace(); } } }
ServerThread
package Multicast; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.util.ArrayList; public class ServerThread extends Thread{ private Socket socket; private ArrayList<ServerThread> threadList; private PrintWriter output; public ServerThread(Socket socket, ArrayList<ServerThread> threads) { this.socket = socket; this.threadList = threads; } @Override public void run() { try { BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); output = new PrintWriter(socket.getOutputStream(), true); while(true) { String outputString = input.readLine(); if(outputString.equals("exit")) { break; } printToAllClients(outputString); System.out.println("Server received : " + outputString); } } catch(Exception e) { System.out.println("error occured in main of server : "+ e.getStackTrace()); } } private void printToAllClients(String outputString) { for(ServerThread sT : threadList) { sT.output.println(outputString); } } }
错误信息
java.net.BindException: Cannot assign requested address: connect at java.base/sun.nio.ch.Net.connect0(Native Method) at java.base/sun.nio.ch.Net.connect(Net.java:579) at java.base/sun.nio.ch.Net.connect(Net.java:568) at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) at java.base/java.net.Socket.connect(Socket.java:633) at java.base/java.net.Socket.connect(Socket.java:583) at java.base/java.net.Socket.<init>(Socket.java:507) at java.base/java.net.Socket.<init>(Socket.java:287) at Multicast.MainClient.main(MainClient.java:13)
参考说明
参考了某教程。
问题解决:修改后的MainServer代码
问题已解决,修改后的MainServer代码如下:
package Multicast; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; public class MainServeur { public static void main(String[] args) { ArrayList<ServerThread> MyThread = new ArrayList<>(); try (ServerSocket serverSocket = new ServerSocket(5000)) { for (;;) { Socket socket = serverSocket.accept(); ServerThread s = new ServerThread(socket, MyThread); MyThread.add(s); s.start(); } } catch (IOException e) { e.printStackTrace();; } } }
内容的提问来源于stack exchange,提问作者Armand Marcelli
相关产品推荐
相关产品推荐

