Клиент-сервер. JAVA

336
02 мая 2017, 05:27

Здравствуйте! Пытаюсь сделать клиент-серверное приложение, но не могу разобраться, почему клиент не обрабатывает команды посланные сервером, но в то же время, сервер может обработать команды, которые посылает клиент. Код для обработки команд посланных сервером не дописан, потому что даже этот кусок не работает.
Не обрабатывает именно команды, которые посылает сервер, но если клиент послал команду серверу, то сервер обрабатывает правильно.

Сервер:

public class Server extends Thread{
BufferedReader in;
PrintWriter out;
ServerSocket server;
Socket client = null;
Frame frame;
Server() throws IOException{
    frame = new Frame();
    try {
        server = new ServerSocket(4444);
        frame.textAreaForServer.append("Welcome to server side!\n");
    } catch (IOException e) {
        frame.textAreaForServer.append("Couldn't listen to port 4444\n");
        System.exit(-1);
    }
    addListenerOnTextField();
    this.start();
}
private void clearVector(){
    frame.textAreaForServer.append("-clr\n");
    try {
        //вот я отправляю сообщение клиенту
        out.println("-clr");
        frame.textAreaForServer.append("Vector is cleared\n");
    } catch (NullPointerException e1) {
        frame.textAreaForServer.append("It's impossible to perform!\n");
    }
}
 public void run(){
    while (true) {
        try {
             //подключение клиента к серверу
            if (client == null) {
                frame.textAreaForServer.append("Waiting for client connection...\n");
                client = server.accept();
                in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                out = new PrintWriter(client.getOutputStream(), true);
                frame.textAreaForServer.append("Client connected\n");              
            }
        } catch (IOException e) {
            frame.textAreaForServer.append("Can't accept\n");
            System.exit(-1);
        }            
    }
}

Клиент:

public class Client extends Thread{
Socket fromserver = null;
BufferedReader in = null;
PrintWriter out;
ControlPanel controlPanel;
Client(ControlPanel controlPanel1) throws IOException {
    controlPanel = controlPanel1;
    addListenerOnTextField();
    this.start();
}
//подключение клиента к серверу
private void connect(ControlPanel controlPanel) {
    controlPanel.textAreaForClient.append("-ct\n");
    if (fromserver == null) {
        controlPanel.textAreaForClient.append("Connecting to localhost...\n");
        try {
            fromserver = new Socket("localhost", 4444);
            in = new BufferedReader(new InputStreamReader(fromserver.getInputStream()));
            out = new PrintWriter(fromserver.getOutputStream(), true);
        } catch (IOException e1) {
            controlPanel.textAreaForClient.append("Server is not available!\n");
        }
    } else {
        controlPanel.textAreaForClient.append("Already connected\n");
    }
}
public void run() {
    while (true) {
        //здесь должна обработаться команда "-clr", которую послал сервер
        try {
            switch (in.readLine()) {
                case "-clr": {
                    VectorOfThreads.getInstance().getVectorOfThreads().removeAllElements();
                    controlPanel.textAreaForClient.append("Vector is cleared\n");
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
}
Answer 1

Скорее всего проблема в этом месте if ("+".equals(in.readLine())) {} поскольку BufferedReader возвращает строки, и метод equals возвращает true если они идентичны. Прежде всего я не увидел где сервер вообще отправляет этот "+" (Может промограл). Но если вам нужно найти подстроку в строке, то применяйте contains().

READ ALSO
XML Parser. NumberFormatException на ровном месте

XML Parser. NumberFormatException на ровном месте

Есть метод, который получает элементы xmlparsers:

222
Ограничить длину дробной части в строке с помощью Stream API

Ограничить длину дробной части в строке с помощью Stream API

Мне необходимо ограничить количество символов в строке после '' до 6

210
Как добавить в меню Drawer Layout текст?

Как добавить в меню Drawer Layout текст?

ЗдравствуйтеКак добавить в меню Drawer Layout текст? Подробности на рисунке

202
RecyclerView внутри NestedScrollView

RecyclerView внутри NestedScrollView

Сделал горизонтальный RecyclerView внутри NestedScrollViewВ итоге при запуске активности если RecyclerView не торчит на определенную высоту, то он сам делает...

346