У меня есть клиент и сервер Java, я пытаюсь написать тесты Junit.В своих тестах я жду установления соединения между сервером и клиентом, а затем пишу сообщение от сервера к клиенту для проверки связи.Я обнаружил, что если я сделаю запись немедленно, она не будет получена, и клиент останется заблокированным методом BufferedReader.readLine ().Если я добавляю сон на полсекунды между соединением сокета и вызовом записи с сервера, все работает отлично.
Я пытаюсь выяснить, зачем нужен сон.Я знаю, что сокет сгенерирован и bufferedReader обернут вокруг его входного потока до того, как мой метод waitForConnection () вернется с отчетом, что сервер и клиент соединились.Мое лучшее предположение заключается в том, что мне нужно убедиться, что я вызываю метод readLine клиента, прежде чем сервер вызовет его метод записи;но я думал, что сокеты будут автоматически буферизовать входящие данные, которые не были сразу прочитаны?
Может ли кто-нибудь подтвердить (или опровергнуть) мое подозрение, что я должен гарантировать, что клиент вызвал readline, прежде чем сервер вызовет запись.И если это требуется, может ли кто-нибудь предложить способ, с помощью которого сервер может определить, готов ли клиент принимать входные данные, не выполняя другое рукопожатие в дополнение к рукопожатию TCP?
edit: я должен был сказать это раньше, но тест, который не проходит, проверяет способность восстановить соединение, когда старое не удается.После того, как клиент подключился, мой фиктивный сервер уничтожил сокет / serverSocket и через несколько секунд снова открыл новый serverSocket и принял новое соединение от клиента.После того, как клиент устанавливает соединение во второй раз, запись завершается неудачно.Мои предыдущие тесты, которые просто проверяют соединение, происходят, и клиент получает запись, похоже, работает.
Спасибо