Out.println (); не работает Java SocketServer

Я пытаюсь отправить сообщение на сервер через клиента, но не вижу сообщения на сервере. Это показывает, что он подключается правильно. Я думаю, что проблема как-то связана с этим в классе Client, но я не совсем уверен. Пожалуйста, дайте мне знать, есть ли у кого-нибудь решение.

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String send = reader.readLine();
out.println(send);
out.flush();

Это клиентский класс:

package com.evolution.client;

import java.net.*;
import java.io.*;
public class Client {
   private Socket client;
   private PrintWriter out;
   private BufferedReader in;

   public static void main(String[] args) {
       Client client = new Client();
       client.startConnection("localhost", 325);
   }
   public void startConnection(String ip, int port) {
       try {
           client = new Socket(ip, port);
       out = new PrintWriter(client.getOutputStream(), true);
       in = new BufferedReader(new InputStreamReader(client.getInputStream()));
       System.out.println("Connected");
       out.println("Connection started from, " + client.getLocalAddress());
       out.flush();
       while (true) {
           String recieve = in.readLine();
           System.out.println(recieve);

           BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
           String send = reader.readLine();
           out.println(send);
           out.flush();
       }
            } catch (Exception e) {
               System.out.println(e);
        }
   }

   public void stopConnection() {
       try {
       in.close();
       out.close();
       client.close();
    }
       catch (Exception e) {

        }
}   
}

Это файл класса сервера:

package com.evolution.server;

import java.io.*;
import java.net.*;

public class Server {
private int port = 325;
private ServerSocket server;
private Socket client;
private PrintWriter out;
private BufferedReader in;

public static void main(String[] args) throws IOException {
    Server server = new Server();
    System.out.println("Start Up!");
    server.start(server.port);
}

public void start(int port) throws IOException  {
    server = new ServerSocket(port);
    try {
        while (true) { //always runs unless break;
            client = server.accept();
               out = new PrintWriter(client.getOutputStream(), true);
                in = new BufferedReader(new 
InputStreamReader(client.getInputStream()));
                //out - send output 

                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    if (inputLine.equalsIgnoreCase("shutdown"))
                        stop();
                    System.out.println(inputLine);
                }
        }
    }   
    finally { //runs no matter what after try {}
        server.close();
            }
    }
public void stop() {
    try {
        in.close();
        out.close();
        client.close();
        server.close();
        System.exit(0);
    }
   catch (Exception e) {  
   }
}
}

Если у вас есть возможные решения, дайте мне знать.

Ваш метод stop () пропустит все оставшиеся шаги при первом исключении. Вы должны заключить каждый вызов .close () в отдельный блок try..catch или написать функцию для закрытия InputStream / OutputStream / Socket.

KC Wong 14.08.2018 05:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Линия Строка recieve = in.readLine (); на стороне клиента будет заблокирован (Блоки BufferedReader readLine ()). Поскольку сервер не отправляет больше строк, ваш код застрял там.

Удаление этой строки позволяет отправлять сообщения от клиента на сервер.

Другие вопросы по теме