我正在制作一个应用程序,必须使用套接字将类发送到用c ++编写的服务器。该类由变量组成,两者都是Ints。我想将java类转换为字节,然后通过套接字将其作为数据包发送。服务器期望数据包大小为8个字节。当我尝试转换我的对象时,我得到超过8个字节。我怎样才能将我的对象发送到服务器?此外,我的代码在两个2字节的卡盘中发送4个字节的数据。为什么这样做?
public void connect2() {
String serverHostname = new String("My IP");
ObjectOutputStream out2 = null;
ObjectInputStream in2 = null;
try {
echoSocket = new Socket(serverHostname, MYPORT);
StatusPacket p = new StatusPacket();
byte[] data = new byte[8];
data = serializeObject(p);
int j = data.length;
out2 = new ObjectOutputStream(echoSocket.getOutputStream());
out2.flush();
in2 = new ObjectInputStream(echoSocket.getInputStream());
DataOutputStream dOut = new DataOutputStream(echoSocket.getOutputStream());
out2.write(data);
out2.close();
in2.close();
echoSocket.close();
} catch (UnknownHostException e) {
System.err.println("Don't know about host: " + serverHostname);
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for "
+ "the connection to: " + serverHostname);
System.exit(1);
}
}
答案 0 :(得分:0)
ObjectOutputStream和ObjectInputStream使用Java序列化机制,其中包含的信息不仅仅是类属性值。您不想处理C ++代码中的那些,因此我建议您从代码中删除所有序列化代码和这两个流。
由于您已经知道了字节级别的内容,因此您应该使用该DataOutputStream。它允许您传输标量数据类型,如byte,int,long等,而不会产生任何开销。只需从对象中获取这两个32位整数,然后将它们传递给DataOutputStream.writeInt(..),就可以了。