我正在制作一个应该使用UDP协议进行通信的iOS应用程序(这些设备连接到同一个Wi-Fi网络)。我设法创建了一个套接字,并将一些数据发送到指定的IP地址:
const char *ip = "192.168.1.100";
- (void)initNetworkCommunication {
cfSocket = CFSocketCreate(kCFAllocatorDefault, AF_INET, SOCK_DGRAM, IPPROTO_UDP, 0, NULL, NULL);
if ( cfSocket == NULL) {
NSLog(@"CfSocketCreate failed");
}else{
if( cfSocket ) {
NSLog(@"Socket created ");
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_len = sizeof(addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(1470); //port
inet_pton(AF_INET,ip, &addr.sin_addr); //ip adress
CFDataRef addrData = CFDataCreate(NULL, (const UInt8*)&addr, sizeof(addr));
CFSocketSetAddress (cfSocket, addrData);
char message []= "UDP test message";
CFDataRef Data = CFDataCreate(NULL, (const UInt8*)message, sizeof(message));
CFSocketSendData(cfSocket,addrData, Data, 0);
}
}
我认为这很有效,因为设备会收到消息。问题是我真的不知道从哪里开始监听/接收数据。我试图寻求一些帮助,但遗憾的是没有任何有用的结果。大多数人都在使用外部库,我想避免使用它们。如果有人能在这个主题上给我一些指导,我会非常感激。
答案 0 :(得分:0)
今天早上我又搜索了一些,实际上找到了我在这个主题中寻找的内容:
UDP broadcast using CFSocket on IOS
向套接字添加回调以及配置RunLoop就像魅力一样:)如果你想从回调中获取数据,只需使用以下内容:
NSData * someData = (NSData*)data;
NSString * someString = [[NSString alloc] initWithData:someData encoding:NSASCIIStringEncoding];
希望这有助于某人。