因此,我将一个参数传递给我的main,它是一个IP,作为char *名称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

最佳答案

您的sockaddr可能是错误的,它是一个struct,其中包含地址和其他一些数据的二进制表示。这是将sockaddr_in强制转换为sockaddr

尝试:

struct sockaddr_in ip4addr;

ip4addr.sin_family = AF_INET;
ip4addr.sin_port = htons(1234);
addrDest.sin_addr.s_addr = inet_addr("1.2.3.4");

关于c++ - 为什么我从此sendto()获取 “Invalid argument”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42548978/

10-10 08:57