Как сделать так, чтобы мой автоматический клиент-серверный сетевой код Java выводился в правильной последовательности?
Позвольте мне начать с того, что я знаю, что это много кода, поэтому, пожалуйста, потерпите меня. Я работаю над проектом, куда я портируюКлиент-сервер Oracle Knock-Knock пример в пример государства-капитала США. Таким образом, вместо шуток KnockKnock, он запускает серию запросов капитала штата. Это работает примерно так:
Сервер: Могу ли я получить разрешение на отправку запроса о капитале штата?
Клиент: ОК
Сервер: Отправить мне состояние, чтобы я мог отправить капитал?
Клиент: Алабама
Сервер: Столица Алабамы - Ханствилл. Хотите еще один (да / нет)?
Клиент: n
Мотивация для этого проекта заключается в том, чтобы позже продемонстрировать некоторый тип отказоустойчивой способности (после того, как я заставлю это работать, я хочу использовать Powershell и использовать его для запуска клиент-сервер как единого модуля).
Вернуться к моему коду. Когда я запускаю его, он дает мне следующий вывод, который я не ищу. Он должен быть синхронизирован так, чтобы клиент и сервер работали в одном состоянии одновременно. Вместо этого, клиентская сторона прыгает впереди серверной части и не достигает последнего состояния Вайоминга. Я пытался добавить в некоторой синхронизациисогласно этому вопросу.
Я связал полный код на pastebin
В коде я использую простой текстовый файл журнала целых чисел:
1
2
3
4
Примечание: я использую ApacheReversedLinesFileReader библиотека
У меня есть подозрение, что моя ошибка из-за того, что Java IO пишет слишком долго. Я думаю, что это может быть из-за этого блока кода:
<pre><code>for (int i = modlastNum; i < KKJokes.length ; i++){
String fromServer = br.readLine();
out.println(KKJokes[ i % KKJokes.length ]);
if ( (i % 3 )==2){
try {
Thread.sleep(11);
} catch (InterruptedException ie) {}
}
// fromServer = br.readLine(); System.out.println ( fromServer ); fromServer = br.readLine(); System.out.println ( fromServer ); // String fromServer3 = br.readLine(); System.out.println ( fromServer3 ) ; System.out.println ( fromServer ) ;
if(fromServer.equals("inputOfYes")){
while (!(fromServer.equals("nowlogged"))) {
fromServer = br.readLine();
}
}
System.out.println ( fromServer ) ;
} // end-forLoop starting at Ln. 93
</code></pre>
Итак, я догадываюсь, что моя автоматическая отправка запросовFixedMessageSequenceServer
класс (посредствомFixedMessageSequenceProtocol
класс), возможно, идет слишком быстро, и, возможно, IO внутриFixedMessageSequenceClient
является узким местом.
Любые советы относительно того, как отладить это или выяснить, приветствуются, спасибо