Здравствуйте! Пытаюсь сделать клиент-серверное приложение, но не могу разобраться, почему клиент не обрабатывает команды посланные сервером, но в то же время, сервер может обработать команды, которые посылает клиент.
Код для обработки команд посланных сервером не дописан, потому что даже этот кусок не работает.
Не обрабатывает именно команды, которые посылает сервер, но если клиент послал команду серверу, то сервер обрабатывает правильно.
Сервер:
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();
}
}
}
}
Скорее всего проблема в этом месте if ("+".equals(in.readLine())) {}
поскольку BufferedReader возвращает строки, и метод equals возвращает true если они идентичны. Прежде всего я не увидел где сервер вообще отправляет этот "+" (Может промограл). Но если вам нужно найти подстроку в строке, то применяйте contains().
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть метод, который получает элементы xmlparsers:
Мне необходимо ограничить количество символов в строке после '' до 6
ЗдравствуйтеКак добавить в меню Drawer Layout текст? Подробности на рисунке
Сделал горизонтальный RecyclerView внутри NestedScrollViewВ итоге при запуске активности если RecyclerView не торчит на определенную высоту, то он сам делает...