C ++ WSAEFAULT错误发送整数

时间:2014-08-08 00:52:39

标签: c++ sockets winsock

我想通过互联网发送一个整数。问题不是bid-endian相关,因为当我使用127.0.0.1将整数发送给自己时也会出现问题。这是代码:

int res = send(Socket, (char*)refresh, sizeof(refresh), 0);

刷新通常为100. res为-1,调用WsaGetLastError返回10014, WSAEFAULT 。 根据我的理解,这意味着我指定的大小不同于缓冲区的大小。如何刷新大小与sizeof(刷新)不同? 另一方面:

int dim = recv(Socket, (char*)&refresh, sizeof (refresh), MSG_WAITALL);

dim 是4,这是对的,但是如果我检查刷新它仍然是0。 任何线索?提前致谢。

1 个答案:

答案 0 :(得分:0)

WSAEFAULT表示buflen参数值的组合在一起并不代表调用进程的地址空间中的有效内存块。

(char*)refresh传递被解释为内存地址的整数的,这是错误的。

(char*)&refresh传递整数的地址,这是正确的做法。