Всем привет есть сервер с множеством подключений и клиент, которые должны просто переписываться между друг-другом, на сервер все доходит а вот для клиента обратно нет, не могу найти в чем проблема
ServerChat
Код | public class ServerChat { public static Thread StartServerT=new Thread(new StartServer()); public static Thread ServerSOutT=new Thread(new ServerSOut()); public static Thread ExitT=new Thread(new Exit()); public static LinkedList<DataInputStream> LLin=new LinkedList<DataInputStream>(); public static LinkedList<DataOutputStream> LLout=new LinkedList<DataOutputStream>(); public static LinkedList<Socket> LLS=new LinkedList<Socket>(); public static ServerSocket ss; public static boolean check=true; public static boolean ChekIn=false; public static int port=6666; public static int num=0; public static int in=0; public static String line=null;
public static void main(String[] args) { try { System.out.println("Server start work"); ss = new ServerSocket(port); StartServerT.setPriority(6); StartServerT.start(); ExitT.setPriority(8); ExitT.start(); }catch (IOException e){ System.out.println("Server not run"); } }
public static class StartServer implements Runnable { @Override public void run() { try{ System.out.println("Client connect run"); while (true){ //ждем подключения от клиентов Socket socket=ss.accept(); LLS.add(socket); if(socket.isConnected()) { OutWriteSocket(); //для каждого клиента создаем DataInputStream и DataOutputStream System.out.println("Client connect " + socket.getInetAddress()); } } }catch (IOException e){ System.out.println("StartServer error"); } }
public void OutWriteSocket() { try { InputStream inIS = (LLS.get(num)).getInputStream(); OutputStream outIS=(LLS.get(num)).getOutputStream(); DataInputStream ind=new DataInputStream(inIS); DataOutputStream outd=new DataOutputStream(outIS); LLin.add(ind); //записываем все в LinkedList LLout.add(outd); num=num+1; System.out.println("Number of client "+in); in=in+1; Thread ServerSInT=new Thread(new ServerSIn()); //новый поток для одного клиента для приема данных ServerSInT.start(); //запускаем его if(!ServerSOutT.isAlive()){ ServerSOutT.start(); //запускаем поток для вывода } }catch (IOException e){ System.out.println("OutWriteSocket error"); } } }
public static class ServerSIn implements Runnable { //поток ввода @Override public void run() { try{ System.out.println("ServerSIn run"); int w=in-1; while (true){ line=LLin.get(w).readUTF(); //принемаем данные ChekIn=true; //при значении true поток вывода начинает проверять значение line и отпровлять его } }catch (IOException e){ System.out.println("ServerSIn error"); } } }
public static class ServerSOut implements Runnable { @Override public void run() { try{ System.out.println("ServerSOut run"); while (true){ if(ChekIn) { for(int i=0; i<LLout.size();i++){ LLout.get(i).writeUTF(line); /*вот это не работает хотя должен на все DataOutputStream System.out.println(line); отпровлять значение line*/ //LLout.get(i).flush(); } } } }catch (IOException e){ System.out.println("ServerSOut error"); } } }
private static class Exit implements Runnable { @Override public void run() { try{ BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); System.out.println("If you want off server write - 'exit'"); while(check) { String line =reader.readLine(); if(line.equals("exit")){ StartServerT.stop(); System.out.println("Server Stop"); check=false; } } }catch (IOException e){ System.out.println("You dont maik off server"); } } }
}
|
|