Соединение Java Socket становится ближе без вызова закрыть соединение - PullRequest
0 голосов
/ 01 июля 2018

У меня есть приложения для сервера и клиентского сокета, как показано ниже,

   public class ServerApp { 

        public void start(int port) throws IOException {
                serverSocket = new ServerSocket(port);
                clientSocket = serverSocket.accept();
                out = new PrintWriter(clientSocket.getOutputStream(), true);
                in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                String instr = in.readLine();
                //do somethings
                out.println("done")
        }

        public static void main(String[] args) throws IOException {
                ServerApp server = new ServerApp();
                server.start(6666);
        }
      }

public class ClientApp {

    public void startConnection(String ip, int port) throws UnknownHostException, IOException {
        clientSocket = new Socket(ip, port);
        out = new PrintWriter(clientSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    }

    public String sendMessage(String msg) throws IOException {
        out.println(msg);
        String resp = in.readLine();
        return resp;
    }
}

Класс юнит-теста,

public class UnitTest {
    @Test
    public void testSend() throws UnknownHostException, IOException {
        ClientApp client = new ClientApp();
        client.startConnection("127.0.0.1", 6666);
        String response = client.sendMessage("test msg");
        assertEquals("done", response);
    }
}

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

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

@ Test (invocationCount = 5, threadPoolSize = 3)

1 Ответ

0 голосов
/ 01 июля 2018

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

...