我是套接字编程的新手,为了测试一些情况,我使用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/