Также я знаком с BSD-сокетами, я новичок в Obj-C и Cocoa, так что терпите меня:)
Я пытаюсь найти простой TCP-клиент в консольном приложении, который простополучает данные в фоновом режиме.Я хотел бы использовать CFSockets для этого из-за удобных функций обратного вызова (реализация его с простыми сокетами в автономном потоке не будет проблемой, но я хочу сделать это способом Mac).
Где яЯ застрял в том, как использовать функции обратного вызова без RunLoop или как заставить RunLoop работать без блокировки.Насколько я понимаю, невозможно поместить RunLoop в GCD (по крайней мере, я пробовал, и цикл никогда не запускался).Так каковы альтернативы?Можно ли запустить RunLoop в NSThread?более простой способ?
Вот фрагмент кода, который я использую.Он отлично работает как одно задание.
CFSocketRef TCPClient;
CFSocketContext CTX = { 0, "MYCLIENT", NULL, NULL, NULL };
TCPClient = CFSocketCreate(NULL, PF_INET, SOCK_STREAM, IPPROTO_TCP,
kCFSocketReadCallBack, (CFSocketCallBack)ConnectCallBack, &CTX);
[...]
CFDataRef connectAddr = CFDataCreate(NULL, (unsigned char *)&addr, sizeof(addr));
CFSocketConnectToAddress(TCPClient, connectAddr, −1);
CFRunLoopSourceRef sourceRef = CFSocketCreateRunLoopSource(kCFAllocatorDefault, TCPClient, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), sourceRef, kCFRunLoopCommonModes);
CFRelease(sourceRef);
CFRunLoopRun();
Заранее спасибо!Thomas