所以我将一个参数传递给我的main,这是一个IP作为char * name ipStr
。
然后我在调用sendto()
之前初始化变量以保持其长度:
sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
char buffer[8];
socklen_t ipLen = sizeof(ipStr);
res = sendto(sock, buffer, sizeof(buffer), 0,
(struct sockaddr*) &ipStr, ipLen);
然而,我仍然将Invalid argument
作为返回错误。
我没有使用g ++编译错误,所以我不确定问题出在哪里。
修改
我注意到在sizeof
之前我没有删除ipLen
,更改了上述内容并仍然获得Invalid argument
。
答案 0 :(得分:3)
您的sockaddr
可能不对,它是struct
,其中包含地址的二进制表示形式以及其中的一些其他数据。它是sockaddr_in
的{{1}}投射。
尝试:
sockaddr
答案 1 :(得分:0)
socklen_t ipLen = sizeof(ipStr)
返回ipStr
数据类型的大小,而不是它指向的字符串的长度。 ipStr
的数据类型为char *
,因此sizeof(ipStr)
会在32位系统上产生8
(或4
)。因此,您的参数可能无法正确解释。
改为使用socklen_t ipLen = strlen(ipStr)
。