por - compartir internet iphone usb windows 10
conexiones de socket local vs remoto en iphone (2)
Deseo enviar mensajes OSC de iphone a otro programa (max / msp) creando y conectando a un socket udp. esto funciona desde el simulador de iphone, es decir, cuando ambas aplicaciones se ejecutan en la misma computadora, pero no cuando instalo la aplicación en el teléfono.
Creo que el problema podría ser especificar la dirección IP de la computadora remota. Estoy usando la estructura sockaddr_in para especificar la información de IP y puerto. cuando ejecuto el código en el simulador, está bien especificar la IP como INADDR_ANY:
sin_addr.s_addr = INADDR_ANY;
cuando lo ejecuto en el dispositivo estoy tratando de convertir mi IP en un número hexadecimal y especificando eso en lugar de INADDR_ANY. Esto no funciona ni para el simulador ni para el dispositivo.
La consola muestra que el socket se está conectando y enviando datos correctamente, pero el programa remoto (max / msp) no recibe ningún dato.
He intentado importar los marcos adecuados para que funcione tanto en el dispositivo como en el simulador.
el código completo sigue:
importar "UDPSocketCreate.h"
@implementation UDPSocketCreate
-(id)init
{
in_addr_t myAddress = 0xC0A80145;
if(self =[super init])
{
// addr es una variable de instancia de tipo struct 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;
// este método se llama desde el delegado de la aplicación después del inicio
-(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
cualquier ayuda sería muy apreciada
A menos que malinterprete que está tratando de conectarse con INADDR_ANY
como dirección del servidor. INADDR_ANY
es solo para que el servidor de escucha le diga a la pila de IP que quiere escuchar en cualquier interfaz de red (frente a una interfaz específica en una máquina multitarjeta). El cliente necesita una dirección de servidor explícita del servidor para enviar paquetes. Mire en la función inet_pton
cómo convertir la dirección IP de la cadena de caracteres a la representación de red.
Cambio;
in_addr_t myAddress = 0xC0A80145
a
in_addr_t myAddress = inet_addr("192.168.1.2");
o lo que sea que IP es
S.