Я хочу отправить сообщения OSC из iphone в другую программу (max/msp), создав и подключившись к сокету udp. это работает с симулятором iphone, то есть когда оба приложения работают на одном компьютере, но не тогда, когда я устанавливаю приложение на самом телефоне.local vs remote socket connections на iphone
Я думаю, что проблема может заключаться в указании IP удаленного компьютера. Я использую структуру sockaddr_in для указания информации о IP и портах. когда я запускаю код в симуляторе, это нормально, чтобы указать IP как INADDR_ANY:
sin_addr.s_addr = INADDR_ANY;
Когда я запускаю его на устройстве, я пытаюсь преобразовать свой IP в шестнадцатеричное число и указывая, что вместо INADDR_ANY. Это не работает ни для симулятора, ни для устройства.
Консоль показывает, что разъем подключает и передает данные в порядке, но удаленная программа (max/msp) вообще не получает никаких данных.
Я попытался импортировать правильные рамки, чтобы он работал как на устройстве, так и на симуляторе.
полный код следующим образом:
импорта "UDPSocketCreate.h"
@implementation UDPSocketCreate
-(id)init
{
in_addr_t myAddress = 0xC0A80145;
if(self =[super init])
{
// адр является переменной экземпляра структуры sockaddr_in типа
memset(&addr, 0, sizeof(addr));
addr.sin_len = sizeof(addr);
addr.sin_family = PF_INET;
addr.sin_port = htons(3333);
addr.sin_addr.s_addr = myAddress;INADDR_ANY
connectAddr = CFDataCreate(NULL, (unsigned char *)&addr, sizeof(addr));
OSC_initBuffer(&myOSCBuff, sizeof(packetBuffer), packetBuffer);
NSString *address = @"/test";
const char *utf8Address = [address UTF8String];
int addressResult = OSC_writeAddress(&myOSCBuff, (char*)utf8Address);
}
return self;
}
CFSocketRef udpSocket;
// Этот метод вызывается из делегата приложения после инициализации
-(void)createUDPSocketRef
{
udpSocket = CFSocketCreate(NULL, PF_INET, SOCK_DGRAM, IPPROTO_UDP, kCFSocketWriteCallBack, myCallBack, NULL);
if(udpSocket == NULL)
{
NSLog(@"socket create failed");
return;
}
CFRunLoopSourceRef runLoopSrceRef = CFSocketCreateRunLoopSource(NULL, udpSocket, 1);
CFRunLoopRef rl = CFRunLoopGetCurrent();
CFRunLoopAddSource(rl, runLoopSrceRef, kCFRunLoopCommonModes);
}
// pressing a button on the UI triggers this method
-(void)bang
{
int myInt = 1;
int writeRestult = OSC_writeIntArg(&myOSCBuff, myInt);
int buffDoneResult;
if (buffDoneResult = OSC_isBufferDone(&myOSCBuff))
{
NSLog(@"valid message in buff");
char *pack = OSC_getPacket(&myOSCBuff);
int packSize = OSC_packetSize(&myOSCBuff);
CFDataRef OSCPacketWithAddressTest = CFDataCreate(NULL, pack, packSize);
CFSocketError sendError = CFSocketSendData(udpSocket, connectAddr, OSCPacketWithAddressTest, 30);
NSLog(@"send error: %d", sendError);
}
OSC_resetBuffer(&myOSCBuff);
NSString *address = @"/test";
const char *utf8Address = [address UTF8String];
int addressResult = OSC_writeAddress(&myOSCBuff, (char*)utf8Address);
}
@end
вся справка была бы принята с благодарностью
много спасибо. что сработало очарование! Я новичок в этом. любые советы по хорошим ресурсам в программировании сокетов? Я знаю, что там есть грузы, но просто интересно, любите ли вы кого-либо в частности. латентность будет проблемой для моего приложения. как свести это к минимуму? – Remover
Для низкоуровневых API-интерфейсов я думаю, что это одна из лучших доступных книг http://www.amazon.com/UNIX-Network-Programming-Networking-Sockets/dp/013490012X –
wohh! выглядит как большой. спасибо – Remover