无法接收放入socket的数据(c ++中的recv)(java中的write())

时间:2013-05-20 10:47:30

标签: c# java android

我是套接字编程的新手,以便测试一些我正在使用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 Len:预计长度:1075093557

如果有人发布了答案,那将是一个很好的帮助。 谢谢

1 个答案:

答案 0 :(得分:0)

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

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

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