gpt4 book ai didi

objective-c - 如果不是主机 IP,CFSocketSetAddress 会失败吗?

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:23 25 4
gpt4 key购买 nike

我正在制作一个简单的 WOL 应用程序。到目前为止,我可以成功创建一个套接字,但是当使用 CFSocketSetAddress 设置地址时,我只能使用我计算机的网络 ip (WiFi ip = 192.168.0.5) 或本地 ip (127.0.0.1)。

对于 WOL,我想将数据发送到广播地址 (255.255.255.255)。如果输入此内容,我将返回错误“无法设置地址”。

我是否误解了 CFSocketSetAddress 的用法,地址应该是主机 IP 还是目标 IP?无论哪种情况,我需要做什么,才能让我的目标 ip 成为广播地址?

下面是我的一些代码:

        /*************************************************************************/


struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_len = sizeof(addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT); //port
inet_aton(IP, &addr.sin_addr);//IP is the host network ip: 192.168.0.5


NSData *address = [NSData dataWithBytes: &addr length: sizeof(addr)];

if (CFSocketSetAddress(WOLsocket, (CFDataRef)address) != kCFSocketSuccess){
NSLog(@"Address could not be set!");
}

最佳答案

我通过使用不同的方法(Got native socket)解决了我的问题,然后我没有使用 CFSocketSetAddress,而是在 CFSocketSendData 的第二个参数中传递了地址。

我没有更改的链接/引用,因为它是我的硬盘上存储了几天大量谷歌搜索的一些代码。

要感谢 David Gelhar,他从我之前的 question 中为我指明了正确的方向.

对于可能需要这个的其他人,这是我的代码;

//Gets native & sets options
/*************************************************************************/
int desc = -1;
desc = CFSocketGetNative(WOLsocket);
int yes = 1;

if (setsockopt (desc, SOL_SOCKET, SO_BROADCAST, (char *)&yes, sizeof (yes)) < 0) {
NSLog(@"Set Socket options failed");
return EXIT_FAILURE;
}
//sets address socket - doesn't bind this is done in CFSocketSendData
/*************************************************************************/
unsigned long bcast = 0xffffffff;

struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_len = sizeof(addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT); //port
addr.sin_addr.s_addr = bcast;
NSData *address = [NSData dataWithBytes: &addr length: sizeof(addr)];

//Sends Data
/*************************************************************************/
char ethadd []= "helloworld";
CFDataRef Data = CFDataCreate(NULL, (const UInt8*)ethadd, sizeof(ethadd));
if (CFSocketSendData(WOLsocket, address, Data, 0) < 0){
NSLog(@"Data could not be sent!");
return EXIT_FAILURE;
}
else NSLog(@"Data Sent");
}

关于objective-c - 如果不是主机 IP,CFSocketSetAddress 会失败吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6811342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com