我目前正在为未来的项目开发一个简单的服务器 - 客户端结构。我决定最好使用自定义标头信息(例如本地/公共 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;
}
}
(我删除了 getter 和 setter)
我决定使用一个对象,这样我就可以在课堂上发送任何东西。它编译得很好,但是如果我尝试发送一个简单的字符串,打包在类中,我会得到一个 NotSerializableException。是否有任何属性或字段无法转换为流,或者我应该将类更改为通用类?我不是流和网络方面的专家,所以我很感谢我能得到的每一点帮助和解释。
注意:我不是以英语为母语的人,请原谅任何拼写/语法问题。