c# - 无法接收放入套接字的数据(cpp中的recv)(java中的write())

标签 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): error reading on socket: number of Args: 16777216, returned value =-1073741824 E/RILC ( 235): error reading on socket: Len of Args: expected length :1075093557

如果有人对此发表答案,将会有很大帮助。 谢谢

最佳答案

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

数字 16777206 以十六进制表示为 0x01000000,在小端表示中为 1677206,但在大端表示中为 1。

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

关于c# - 无法接收放入套接字的数据(cpp中的recv)(java中的write()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16647835/

相关文章:

c# - 需要一个模式来为每个实例方法模式调用 Verify 方法

java - 使用自定义适配器在 ListView 中获取 JSON 数据

java - 无法从 String 反序列化 `java.time.LocalDate` 类型的值

android - Googleplay - 不支持的设备兼容性

c# - 如何在 C# 中包装带有可选参数的方法?

c# - 防止 UI 在处理数据时卡住

java - Android 和 PC 通过 USB 通信 : What is a safe directory that I can use ADB push/pull on and access from an Android app?

java - 更改工具栏概述的文本颜色

android - 无法在 Android Studio 中启动 AVD

c# - 无法加载文件或程序集...系统找不到指定的文件 C#