c 和java通讯大小端问题处理_c++和java在socket通信过程中发送和接收函数的问题 | 学步园...

以下是我在做java和c++ socket通信过程中如何正确使用java接收函数的问题,主要还是为了完成项目,可能不够详细,请多多指正:

1、c++端发送:如果发送的是整型等多字节类型,必须先要经过大小端的转换才可以发送,java端接收此种类型时用readInt、readFloat等函数,否则java端会出现乱码;

大小端代码转换如下:

#define BSWAP_32(x) \

(UINT32) ( (( ((UINT32)(x)) & 0xff000000 ) >> 24) | \

(( ((UINT32)(x)) & 0x00ff0000 ) >> 8 ) | \

(( ((UINT32)(x)) & 0x0000ff00 ) << 8 ) | \

(( ((UINT32)(x)) & 0x000000ff ) << 24) \

)

#define BSWAP_16(x) \

(UINT16) ( ((((UINT16)(x)) & 0x00ff) << 8 ) | \

((((UINT16)(x)) & 0xff00) >> 8 ) \

)

//c++端

int tmp = 20;

int length = BSWAP_32(tmp);

int ret = send(sock, (char*)&length, sizeof(int), 0);

..................

//java端

................

int tmp = in.readInt();

...........

2、c++端发送字符串时,java端用一个byte数组接收,用到的函数是int read(byte[] b,int off,int len),如果用该函数,在接收之前应先发送该字符串的长度;

//c++端

string str = "hello world";

ret = send(sock, str.c_str(), str.length(), 0);

........

//java端

byte[] tmp = new byte[size];

in.read(tmp, 0, tmp.length);

String str = new String(tmp);

............

3、c++发送字符数组时,java端用intread(byte[] b)来接收就可以了。

//c++端

char* buffer = ......;

int ret = send(sock, buffer, bufferSize, 0);

.............

//java端

buffer = new byte[bufferSize];

int size = in.read(buffer);

..................

4、java端发送字符串,用void write(byte[] b);我个人认为c++端不知道发送的字符串有多长,所以首先向c++端发送一个字符串长度,然后再发送字符串;

//java发送端

out.writeByte((byte)fileNameLength);

..............

out.write(fileName.getBytes());

...............

5、java端发送数组,我个人认为不管是什么类型的数组,应该先转换成byte数组再发送出去

out.write(buffer, 0, bufferSize);

以上是我个人在做项目过程中总结的,有不足之处,欢迎大家来交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值