「java发送结构体」java 结构
今天给各位分享java发送结构体的知识,其中也会对java 结构进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、Java和c++的Socket通信如何发送结构体
- 2、java socket 如何发送一个结构体消息,java中结构体是个什么概念...
- 3、JAVA客服端(android), C#服务器端,通过Socket传输结构体数据。怎么实现?
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发送结构体的信息别忘了在本站进行查找喔。