1

我是套接字编程的新手,以便测试某些情况,我正在使用 java 端客户端通过套接字发送整数数据,并且我想在 cpp 的服务器端接收该数据。

我在客户端(java)上的代码看起来像

out=new DataOutputStream(s.getOutputStream());
ar=1;
le=1;
out.writeInt(ar);
out.flush(); 
out.writeInt(le);
out.flush();

我在 cpp 中使用 recv 函数来接收这些数据。cpp端的代码看起来像

  if (int(recv(acceptFD, &number, sizeof(int), 0)) != sizeof(int))
  {
     ALOGE ("error reading on socket: number of Args: %d,reutrned value =%d\n",number);
    return;
  }

  for (int i = 0; i < number; i++) 
  {
    int len;
    if (recv(acceptFD, &len, sizeof(int), 0) != sizeof(int)) 
    {
        ALOGE ("error reading on socket: Len of Args: expected length :%d\n",len); 
         freeDebugCallbackArgs(i, args);
        return;
    }

并将日志显示为

E/RILC(235):套接字读取错误:Args 数:16777216,返回值 =-1073741824 E/RILC(235):套接字读取错误:Args 长度:预期长度:1075093557

如果有人对此发表答案,那将是一个很大的帮助。谢谢

4

1 回答 1

0

我强烈怀疑这是字节顺序的问题。

用十六进制表示的数字 16777206 是 0x01000000,在 little-endian 表示中是 1677206,但在 big-endian 表示中是 1。

将数字读取为字节数组并包含代码以补偿 Java 源和 C 目标之间的不同字节顺序。

于 2013-05-20T16:22:49.093 回答