从C+;传输字节时,数据会损坏+;到爪哇 < >我的C++服务器使用下面的代码发送给我的java客户机11号< /p> boost::system::error_code ignored_error; tcp::socket* server_socket; ... size_t check = boost::asio::write(*server_socket, boost::asio::buffer("11", 2), ignored_error);

从C+;传输字节时,数据会损坏+;到爪哇 < >我的C++服务器使用下面的代码发送给我的java客户机11号< /p> boost::system::error_code ignored_error; tcp::socket* server_socket; ... size_t check = boost::asio::write(*server_socket, boost::asio::buffer("11", 2), ignored_error);,java,c++,sockets,boost-asio,Java,C++,Sockets,Boost Asio,check等于2,因此服务器端没有问题 我的Java客户机使用以下代码接收数据 Socket tcpSocket; BufferedInputStream inFromServer; ... String temp = ""; for(int i=0; i<2; i++) temp += (char) inFromServer.read(); int num_of_filters = Integer.parseInt(temp); //Here the following erro

check等于2,因此服务器端没有问题

我的Java客户机使用以下代码接收数据

Socket tcpSocket;
BufferedInputStream inFromServer;
...
String temp = "";
for(int i=0; i<2; i++)
    temp += (char) inFromServer.read();
int num_of_filters = Integer.parseInt(temp); //Here the following error is thrown

java.lang.NumberFormatException: For input string: "0
sockettcpsocket;
BufferedInputStream信息服务器;
...
字符串temp=“”;

对于(inti=0;i我不确定,但我将从研究两端的编码开始。
然后接收字节并使用新字符串(byte[]bytes,Charset Charset)

您最好使用一个公共库来读取它,而不是自己逐个字节地阅读。例如,使用apache commons IO,您可以:

    String temp = IOUtils.toString(inFromServer);

它可能与不同的endianess有关吗?@Mhd.Tahawi我对此表示怀疑。它作为原始字符发送。但这可能是一个Unicode问题,其中java字符串是,而传入的缓冲区不是。您犯的第一个错误是,您没有在任何地方检查流的结尾。如果您希望正好有两个字节,我将使用DataInputStream.readFully()。@EJP End of stream不是这里的问题。尝试使用DataInputStream.readFully(),但引发了相同的错误。