gpt4 book ai didi

java - 如何将 tcp 套接字上的 java byte[] 发送到服务器上的 c++ char[]?

转载 作者:行者123 更新时间:2023-11-28 02:47:08 25 4
gpt4 key购买 nike

我想从 Java 客户端发送一个 byte[] 数组到服务器,服务器接收 C++ 中的数据。字节数组包含转换为字节的字符和整数(它是一个波头)。服务器未正确接收值。如何发送 byte[] 以便服务器套接字可以将其写入 char[]?我正在使用以下代码:

客户端.java:

//Some example values in byte[]
byte[] bA = new byte[44];
bA[0]='R';
...
bA[4]=(byte)(2048 & 0xff);
...
bA[16] = 16;
....

//Write byte[] on socket
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.write(bA,0,44);

服务器.cpp

int k = 0,n = 0;
char buffer[100];
ofstream wav("out.wav", ios::out | ios::binary);
while(k<44){//receive 44 values
memset(buffer ,0 , 100);
n = recv(sock , buffer , 100 , 0);
k += n;
buffer[99] = '\0';
wav.write(buffer,n);
}

最佳答案

我看到的一个问题是,如果您收到 100 个字符,您将使用此行破坏数据:

buffer[99] = '\0';

如果该位置有 NULL 以外的字符,则数据已损坏。由于数据是二进制的,因此不需要 null 终止 buffer。从循环中删除该行。

相反,依靠 recv 的返回值来确定要复制到流中的字符数。这引出了另一点——您没有检查 recv 是否返回错误。

关于java - 如何将 tcp 套接字上的 java byte[] 发送到服务器上的 c++ char[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24022769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com