【发布时间】:2014-08-07 01:29:40
【问题描述】:
我正在尝试使用 winsock2 通过网络发送数组。现在,我读到微软禁用了发送原始指针,但您仍然可以通过将指针转换为 char* 来发送未经编辑的二进制数据:
send(rsock, (char*)&counter, len, 0);
但是,问题是当数据到达客户端时将数据放回数组中。这里,pass 是二进制数据。这就是我处理整数、布尔值和双精度数的方式。
recv(sock, pass, sizeof(int), 0);
refresh = (int((void*)&pass));
recv(sock, pass, sizeof(bool[4800][254]), 0);
**key = (bool)&pass;
recv(sock, pass, sizeof(double[4800][254]), 0);
**mil = (double)&pass;
整数不是数组,而 bool 和 doubles 存储在二维数组中。现在,编译器说这段代码适用于 int 和 bool 但对于双打它说“'type cast' : cannot convert from 'char **' to 'double'” “无效的类型转换”,即使我试图将原始数据放入其中。我做错了什么吗?还有其他解决方法来发送数组吗?提前致谢。
编辑:另外,我还没有在另一台 PC 上尝试过代码,所以我非常怀疑整数和布尔值的转换是否正确。
【问题讨论】:
-
您到底在哪里“读到 [that] Microsoft 禁止发送原始指针”?你可以发送任何你喜欢的东西。在接收者那里它是否意味着任何东西是另一个问题。
-
我不记得我读到了什么确切的问题,但它在堆栈溢出 - 顺便说一句,send(rsock, &counter, len, 0); 不能编译,我必须使用 send(rsock, (char)&counter, len, 0);*。 char后面还有一个乘号,但是网站格式不显示。
-
你读错了,或者记错了。除了这个问题之外,整个网站上的“Microsoft 禁用发送原始指针”都没有匹配项。您的问题与编译错误有关, 而不是“Microsoft 禁用发送原始指针”。
-
好吧,考虑到我记错了,你有关于发送问题或演员表问题的任何线索吗?谢谢。
-
不存在“发送问题”。有一个转换问题,这只是 C 编程,并且您的
recv()代码存在问题:您假设它填充了缓冲区。它没有签订这样做的合同。需要将recv()的结果存入一个变量,检查为-1,检查为0,否则作为接收的字节数;如果下一段代码足够了,OK,否则循环。
标签: c++ arrays pointers networking winsock2