複数のクライアントと1つのサーバーがあります。サーバーは、各クライアントを1つのスレッドで処理します。クライアントは、custonオブジェクトをマスターに送信する必要があります。私はこれとこれをチェックしました、java.io.StreamCorruptedException: invalid type code: AC
それはまさに私が持っているエラーについて話します。
しかし、私は提案された解決策を理解していませんでした。彼はObjectOutputStreamを継承し、simpleは2回目以降にヘッダーを書き込まず、オブジェクトを送信する必要があります。これは私にはうまくいきません。
TCPソケットを介してカスタムオブジェクトを送信する別の解決策はありますか?クライアントは10秒ごとにデータを収集し、送信されるオブジェクトを再作成します。
繰り返しの場合は申し訳ありませんが、似たような質問をたくさん読んでいますが、シナリオに対する答えが見つかりません。
前もって感謝します
編集
送信メソッド(クライアント内)
public void TCPEchoClientSend(MonitoredData _mData) throws IOException {
if (_mData == null)
throw new IllegalArgumentException("Parameter: <Monitored Data> empty.");
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
// Send the encoded object to the server
oos.writeObject(_mData);
oos.close();
System.out.println("Client sent the monitored data package.");
}
受け取る
public static void handleEchoClient(Socket client, Logger logger) {
try {
MonitoredData mdata;
// Get the input and output I/O streams from socket
ObjectInputStream ois = new ObjectInputStream(client
.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(client
.getOutputStream());
// Receive until client closes connection, indicated by -1;
while ((mdata = (MonitoredData) ois.readObject()) != null) {
System.out.println("Got received data. Ready to save.");
hdb.saveOrUpdate(mdata);
System.out.println("Monitored Data arrived at home.");
}
// logger.info("Client " + _clntSock.getRemoteSocketAddress()+
// ", echoed " + totalBytesEchoed + " bytes.");
} catch (IOException ex) {
logger.log(Level.WARNING, "Exception in echo protocol", ex);
} catch (ClassNotFoundException e) {
logger.log(Level.WARNING, "Exception in echo protocol", e);
} finally {
try {
client.close();
} catch (IOException e) {
}
}
}