Java套接字:发送对象属性而不是对象

时间:2013-06-10 10:11:20

标签: java sockets networking protocols

我创建了一个客户端 - 服务器应用程序,它将简单的Java对象发送到服务器并将其存储在那里。但是,在这种情况下,序列化并不是必需的,因为我的对象只包含一些字符串和整数,如姓名,电话号码,地址,年龄和ID。发送字符串更复杂,因为我需要一个可靠的应用程序协议,但我不确定这是如何正确完成的。

这就是我认为它应该工作的方式:我必须通知服务器他收到了什么,以严格的顺序发送值并发送消息告诉服务器传输已经结束。在TCP流的开头发送某种秘密密钥以保护服务器免受未经授权的访问也是一件好事。如果有人能带领我走上正轨,我会很高兴。

1 个答案:

答案 0 :(得分:1)

客户端连接到服务器并使用DataOutputStream发送对象(作为字段)并最终关闭流

dous = new DataOutputStream(sock.getOutputStream());
for(MyObject o : objects) {
  dous.writeInt(o.getId());
  dous.writeUTF(o.getName());
  ...
}
dous.close();

服务器使用DataInputStream读取客户端发送的对象,并通过EOFException确定EOS

dis = new DataInputStream(sock.getInputStream());
try {
    for(;;) {
      int id = dis.readInt(o);
      String name = dis.readUTF();
      ...
      MyObject obj = new MyObject(id, name, ...);
    }
} catch(EOFException ex) {
        // ignore, client closed OutputStream
}