私は現在、将来のプロジェクトのための単純なサーバー - クライアント構造に取り組んでいます。ローカル/パブリックIP、タイムスタンプなどのカスタムヘッダー情報を使用して独自のデータパッケージを作成するのが最善であると判断しました。以下は、私が思いついたクラスです:
public class DataPackage {
private Object object;
private Date time;
private long timeMs;
private boolean responded;
private String publicIp;
private String internalIp;
private int hash;
public DataPackage(Object object) {
this.object = object;
this.responded = false;
this.time = Calendar.getInstance().getTime();
this.timeMs = System.currentTimeMillis();
this.publicIp = this.generatePublicIp();
this.internalIp = this.generateInternalIp();
this.hash = System.identityHashCode(this);
}
private String generatePublicIp() {
try {
URL whatismyip = new URL("http://checkip.amazonaws.com");
BufferedReader in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
return in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private String generateInternalIp() {
try {
return InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
(ゲッターとセッターを削除しました)
クラスで何でも送信できるように、オブジェクトを使用することにしました。コンパイルはうまくいきますが、クラスにパッケージ化された単純な文字列を送信しようとすると、NotSerializableException が発生します。ストリームに変換できない属性またはフィールドはありますか、またはクラスをジェネリックに変更する必要がありますか? 私はストリームとネットワーキングの専門家ではないので、私が得ることができるあらゆる助けと説明に感謝しています.
注: 私は英語のネイティブ スピーカーではありませんが、つづりや文法の問題はご容赦ください。