【发布时间】:2012-12-22 19:07:29
【问题描述】:
每当我尝试通过 TCP 套接字发送负数时,当我打印收到的内容时,它会显示“4.29497e+09”。我正在做的就是:
int i = -8;
int temp = htonl(i);
write(sock,&temp,4);
在服务器上:
int temp;
read(sock, &temp,4);
int read = ntohl(temp);
cout << read << endl;
如果有人可以提供帮助,将不胜感激。
【问题讨论】:
-
您在
read()之后忘记从网络订单转换为主机订单 -
您对 int 的大小做了一些假设。
-
你忘了检查
read的返回值!如果是3呢?另外,不要给变量和函数同名,那只是自找麻烦。你应该使用正确的类型(uint32_t)和htonl/ntohl。 -
@tpg2114:这不是强制性的,只要两个端点使用相同的架构
-
即使假设您的架构的特定编译器总是具有 sizeof(int) == 4 也是错误的。另外,如果您稍后在移植应用程序时忘记了它,就不会出现错误 - 您只会得到一个错误的值并破坏超出的内存。