「java发送结构体」java 结构

博主:adminadmin 2023-03-21 17:43:06 748

今天给各位分享java发送结构体的知识,其中也会对java 结构进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Java和c++的Socket通信如何发送结构体

服务端

C++程序

,客户端

java程序

,发送报文格式:

结构体

报头

+数据负载,客户端发送和接收时需要做

字节序

的转换。

java socket 如何发送一个结构体消息,java中结构体是个什么概念...

有一个socket 程序,一端是c++写的socket 服务程序

另一端是Java写客户端程序,两者之间需要通信。

c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组。

解决方法:c++/c socket 在发送结构体的时候其实发送的也是字节流。因为结构体本身也是内存中的一块连续数据。问题就变成了如何把结构体手动转成字节的问题了

采用类似的报头:

// packet head

typedef struct tagPacketHead{

long PacketID;

long PacketLen;

}PacketHead;此时套接口的读写方式为先读报头,在报头中取出数据负载的长度,然后再读相应字节的数据。

包头后面跟上包体,其中包体的长度,就是上面结构体中的PacketLen,Clinet首先接受包头,因为包头是两边约定好的,所以可以直接Receive一个定长的消息,也就是这个包头的长度的消息,从包头中取得包体的长度后,就可以再次Receive一个包体长度的消息了。那么Java中如何发送一个结构体呢?下面是解决方法:

使用C/S模式,Client为VC6开发,Server为Java,通过Socket通信。

package org.charry.org;

import java.net.*;

/**

*

* 字节转换,参考网络文章

*/

class Packet {

private byte[] buf = null;

/**

* 将int转为低字节在前,高字节在后的byte数组

*/

private static byte[] toLH(int n) {

byte[] b = new byte[4];

b[0] = (byte) (n 0xff);

b[1] = (byte) (n 8 0xff);

b[2] = (byte) (n 16 0xff);

b[3] = (byte) (n 24 0xff);

return b;

}

/**

* 将float转为低字节在前,高字节在后的byte数组

*/

private static byte[] toLH(float f) {

return toLH(Float.floatToRawIntBits(f));

}

/**

* 构造并转换

*/

public Packet(int packetID, int packetLen, String packetBody) {

byte[] temp = null;

buf = new byte[packetBody.getBytes().length + 8];

temp = toLH(packetID);

System.arraycopy(temp, 0, buf, 0, temp.length);

temp = toLH(packetLen);

System.arraycopy(temp, 0, buf, 4, temp.length);

System.arraycopy(packetBody.getBytes(), 0, buf, 8, packetBody.length());

}

/**

* 返回要发送的数组

*/

public byte[] getBuf() {

return buf;

}

/**

* 发送测试

*/

public static void main(String[] args) {

try {

String tmp = “test string!”;

Socket sock = new Socket(”127.0.0.1″, 8888);

sock.getOutputStream().write(

new Packet(123, tmp.length(), tmp).getBuf());

sock.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

如果需要用Java 接收结构体的话只需要将上面过程逆过来即可。

JAVA客服端(android), C#服务器端,通过Socket传输结构体数据。怎么实现?

最简单的方式用XML或者JSON.在Server端封装成xml或者JSON格式.在Client端解析.

java发送结构体的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 结构、java发送结构体的信息别忘了在本站进行查找喔。