Я использую ClientHandler на стороне сервера для обработки связи и ServerConnection на стороне клиента для обработки связи там.
Вот ClientHandler (на стороне сервера)
public void run() {
System.out.println("Running");
try {
input = new ObjectInputStream(socket.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
while (isListening) {
try {
String packetMessageJson = (String) input.readObject();
Gson gson = new Gson();
PacketMessage packetMessage = gson.fromJson(packetMessageJson, PacketMessage.class);
Double auctionID = null;
switch (packetMessage.getType()) {
Это использование работает нормально, пока я не сделаю это дважды. Со стороны клиента
ObjectOutputStream objectOutputStream = новый ObjectOutputStream (socket.getOutputStream()); objectOutputStream.writeObject(sampleObject)
Какие меры предосторожности должны быть?
Выскакивает ошибка AC При попытке связи. Я знаю, что это означает, что я дважды инициализирую ObjectOutputStream, но есть ли способ обойти это, чтобы я мог использовать контроллеры JavaFx для переключения между представлениями без двойной инициализации
ObjectStream
для передачи строки, содержащей кодировку JSON, через поток сокета. ТОГДА вы используете GSON для анализа JSON и создания из негоPacketMessage
. Почему бы вам просто не передатьString
как текст поверх потока? Таким образом, вы можете пройти столько из них, сколько захотите. Если вы посмотрите на методыDataInputStream
иDataOutputStream
, а также на методыreadUTF
/writeUTF
, вы увидите способ передачи строк как единиц. - person Stephen C   schedule 14.12.2020