Всем привет есть сервер с множеством подключений и клиентов, которые должны просто переписываться между друг-другом, на сервер все доходит а вот до клиентов обратно нет, не могу найти в чем проблема.
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");
}
}
}
}