gpt4 book ai didi

iphone - iPhone 上的本地与远程套接字连接

转载 作者:行者123 更新时间:2023-12-03 20:01:58 24 4
gpt4 key购买 nike

我想通过创建并连接到 udp 套接字将 OSC 消息从 iphone 发送到另一个程序 (max/msp)。这在 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])
{

//addr是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;

//此方法在初始化后从应用程序委托(delegate)中调用

-(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

任何帮助将不胜感激

最佳答案

改变;

in_addr_t myAddress = 0xC0A80145

in_addr_t myAddress = inet_addr("192.168.1.2");

或者无论该 IP 是什么。

S.

关于iphone - iPhone 上的本地与远程套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2156862/

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