Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2016, 13:05   #1
perezzz
Новичок
Джуниор
 
Регистрация: 29.08.2016
Сообщений: 1
По умолчанию Проблема с DataOutputStream: ServerChat && ClientChat

Всем привет есть сервер с множеством подключений и клиентов, которые должны просто переписываться между друг-другом, на сервер все доходит а вот до клиентов обратно нет, не могу найти в чем проблема.

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");
            }
        }
    }
}
perezzz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не перегружается ostream& operator<<(ostream &, Card&) Antej Общие вопросы C/C++ 2 17.12.2012 14:02
TForm & TImage & PNG & Прозрачность delphi_beginner Общие вопросы Delphi 7 19.09.2009 08:46
Просто не понимаю б чём проблема!!!!!!!(char* && index) artush1984 Общие вопросы C/C++ 12 30.05.2009 03:30
Проблема с MVC++ 2005 && 2008 на висте NetGod Софт 1 09.08.2008 17:14