标签: bonjour

无法在 Node WebKit 应用程序中运行 Node.js 模块 mdns

我有一个节点 webkit 应用程序,它使用 mdns 模块从 Mac(使用 Mavericks)发布 Bonjour 服务。当我运行服务器代码时node server.js一切正常,但是当运行使用相同服务器代码的节点 webkit 应用程序时,我收到此错误:

"Uncaught Error: dlopen(/Users/me/myfolder/node_modules/mdns/build/Release/dns_sd_bindings.node, 1): no suitable image found.  Did find:
    /Users/me/myfolder/node_modules/mdns/build/Release/dns_sd_bindings.node: mach-o, but wrong architecture", source: /Users/me/myfolder/node_modules/mdns/lib/dns_sd.js (35)
Run Code Online (Sandbox Code Playgroud)

显然,当您安装该mdns模块时npm,它是为 x86 架构构建的,而我需要它用于 i386,因为 node-webkit 是为 i386 构建的(我通过阅读此线程发现了这一点: http: //forums.macrumors.com/showthread .php?t=879780 )。您可以通过在终端中运行以下命令来验证它:

$ lipo -info /Applications/node-webkit.app/Contents/MacOS/node-webkit 
Non-fat file: /Applications/node-webkit.app/Contents/MacOS/node-webkit is architecture: i386
Run Code Online (Sandbox Code Playgroud)

我发现这个链接建议了一个解决方案:https://github.com/rogerwang/node-webkit/issues/296对于另一个模块(节点代理)。建议的说明是:

I managed to build a 32-bit version of node-proxy as follows:
I installed nw-gyp 
I ran nw-gyp configure --target=0.3.6 …
Run Code Online (Sandbox Code Playgroud)

mdns bonjour node.js gyp node-webkit

3
推荐指数
1
解决办法
2588
查看次数

使用 NWBrowser for Network.framework 时,为什么 TXT 记录设置为 nil?

我正在尝试使用 Swift 中的 Network.framework 为我的 iOS 应用程序获取在本地网络上运行的 Bonjour 服务列表。为了发现与我的应用程序运行时使用相同协议版本的设备,我需要能够查看网络上运行的 Bonjour 服务的 TXT 记录。但是,当我尝试打印时result.endpoint.txtRecord总是返回零。

下面是我的代码示例(经过简化以重点关注此示例的关键部分):

let parameters = NWParameters.tcp
parameters.includePeerToPeer = true
parameters.allowLocalEndpointReuse = true

let browser = NWBrowser(for: .bonjour(type: "_tictactoe._tcp", domain: nil), using: parameters)

browser.browseResultsChangedHandler = { results, changes in
    for result in results {
        print("Browser result. txtRecords: \(result.endpoint.txtRecord)")
    }
}
Run Code Online (Sandbox Code Playgroud)

mdns bonjour ios swift network-framework

3
推荐指数
1
解决办法
218
查看次数

NSNetservice没有获得netServiceDidPublish委托调用

我想要做的是在我的ipod touch上启用一个简单的bonjour服务.在我发布我的自定义bonjour服务后,委托人没有得到"netServiceDidPublish:"调用.我还检查"netService:(NSNetService*)sender didNotPublish:"中没有任何错误消息.以下是我的代码部分:

// AsyncSocket class comes from an awesome project: cocoa async socket.
// http://code.google.com/p/cocoaasyncsocket/
AsyncSocket* listenSocket;

listenSocket = [[AsyncSocket alloc] initWithDelegate:self];
NSError *error;
if (![listenSocket acceptOnPort:0 error:&error])
{
    NSLog(@"Error starting server: %@", error);
    return NO;
}

int port = [listenSocket localPort];

NSLog(@"Server started on port: %hu", port);
isRunning = YES;

// register itself to bonjour service.
netService = [[[NSNetService alloc] initWithDomain:@"local."
                                             type:@"_sampleservice._tcp" 
                                             name:@"myservice" 
                                             port:port] autorelease];

if (!netService)
{
    NSLog(@"Failed to enable net service");
    [listenSocket disconnect];
    return NO;
} …
Run Code Online (Sandbox Code Playgroud)

bonjour objective-c nsnetservice

2
推荐指数
1
解决办法
2550
查看次数

macOS 10.13(High Sierra)上的MCNearbyServiceAdvertiser无法正常工作

我试图在macOS 10.13中宣传具有Multipeer Connectivity的服务:

    override init() {
    self.serviceAdvertiser = MCNearbyServiceAdvertiser(peer: peerID, discoveryInfo: nil, serviceType: serviceID);
    super.init();
    self.serviceAdvertiser.delegate = self;
    self.serviceAdvertiser.startAdvertisingPeer();
}
Run Code Online (Sandbox Code Playgroud)

哪里

    private let serviceID = "sample-test";
private let peerID = MCPeerID(displayName:  Host.current().localizedName!);
Run Code Online (Sandbox Code Playgroud)

调用广告客户端的调用方法会立即失败,而不是让正确的委托回调方法失败,这就是我在控制台中获得的内容:

2017-10-16 11:22:35.568607-0700 macApp[3060:288948] [] tcp_listener_socket_create bind(fd 3) failed: [1] Operation not permitted
2017-10-16 11:22:35.569223-0700 macApp[3060:288940] [MCNearbyServiceAdvertiser] Server did not publish: errorDict [{
    NSNetServicesErrorCode = 1;
    NSNetServicesErrorDomain = 1;
}].
Run Code Online (Sandbox Code Playgroud)

不知道怎么解决这个问题?

更新:

在iOS模拟器中运行完全相同的代码工作正常,所以我猜它与Mac机器上的某些权限有关.

看到日志显示这是一个权限问题,我继续在Mac上启用root用户,并尝试运行相同的代码无济于事.

我正在考虑关闭系统完整性保护,但我很难接受Apple如果要使用所有这些安全性妥协而发布此框架的事实.会继续调查.

bonjour multipeer-connectivity swift macos-high-sierra

2
推荐指数
1
解决办法
513
查看次数

iOS 14 上的 UDP 监听器

我有一个关于如何在 iOS 14 上设置 UDP 侦听器的问题。我有一个 UDP 侦听器,该侦听器过去一直有效,但更新到 iOS 14 后,它偶尔有效/根本无效。

\n

它位于 NSObject 中,并在端口 15000(无特定 IP 地址)上侦听本地网络上的 UDP 广播。它使用 CocoaAsyncSocket 库。当我调用setUpSocket()本地网络权限时,不会触发,但应用程序能够偶尔拾取 UDP 数据包。

\n
\nvar socket: GCDAsyncUdpSocket?\nvar broadcastPort: UInt16 = 15000\nvar broadcastAddress: String = ""\nvar connectAddress = ""\nvar connectPort = 0\n\nfunc setUpSocket() {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0findUDP()\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0let socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: DispatchQueue.main)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0socket.setIPv4Enabled(true)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0socket.setIPv6Enabled(false)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0do {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0try socket.bind(toPort: broadcastPort) /*15000*/\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0try socket.enableBroadcast(false)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0try socket.beginReceiving()\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0} catch let error as NSError {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0print("Issue with setting up listener \\(error)")\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n\xc2\xa0\xc2\xa0}\n\n/*Called when UDP packets are received.*/\nfunc udpSocket(_ sock: GCDAsyncUdpSocket, didReceive data: Data, …
Run Code Online (Sandbox Code Playgroud)

udp network-programming bonjour swift ios14

2
推荐指数
1
解决办法
4427
查看次数

在Windows中将Bonjour(dns_sd.h)库添加到Qt

我一直在尝试正确添加Apple提供的开源dns_sd.h库.我正在编写一个使用BonjourRegistrar类的程序,如下所示: 链接文本

我已经在Mac环境中编写了我的程序,现在我正在尝试将其移植到Windows.Bonjour SDK附带了几个类,我对如何正确地将类添加到我的Qt项目感到困惑.我试过添加一行:

win32:LIBS += c:\dnsssd.lib
Run Code Online (Sandbox Code Playgroud)

在.pro文件中没有成功.此外,我试图将dns_sd.h和dns_sd.c文件添加到我的项目中,并得到一些错误,例如:

'UINT8':没有命名类型'INT8':没有命名类型'UINT16'没有命名类型'INT16'没有命名类型

最后,我现在尝试在此链接链接文本中修改xcimo所描述的lib文件

我不知道我是否使用正确的命令来正确修改这些文件.

windows qt bonjour

1
推荐指数
1
解决办法
3614
查看次数

导致此错误的原因(java):"位置0x0的内存访问无效rip = 0x106282bae"

我正在为推特网络课程的P2P Twitter客户端工作.我试图给我的同伴一个注册自己的方式,以便其他同行可以发现它.我正在创建一个DNS TXT记录,以便我可以调用DNSSD.Register().但是,当调用此方法时,我收到一条错误,内容如下:

导致此错误的原因(java):"位置0x0的内存访问无效rip = 0x106282bae"

以下是导致它的方法:

import com.apple.dnssd.*;
    public static void announce()throws com.apple.dnssd.DNSSDException{
        TXTRecord txtRec = new TXTRecord();
        txtRec.set("Version", "1.1");
        txtRec.set("EncryptionSupport", "false");
        txtRec.set("DisplayName", profile.getPropertyValue("UserName"));
        txtRec.set("UserID", profile.getPropertyValue("UserID"));

        RegisterListener myRegisterListener = null;
        DNSSDRegistration reg = null;
        RegisterListener myRegistrationListener = null;
        reg = DNSSD.register
            (0, DNSSD.ALL_INTERFACES, profile.getPropertyValue("UserName"),
            profile.getPropertyValue("DNSSDServiceName"), 
            null, null, 4444, txtRec, myRegistrationListener);
    }
Run Code Online (Sandbox Code Playgroud)

"reg = ..."行是导致错误发生的行.关于我做错了什么的任何想法?其中很多都来自我不完全理解的例子.

java networking p2p bonjour

1
推荐指数
1
解决办法
1851
查看次数

在iOS设备之间共享数据

我想在2个iOS设备(iPhone或iPad)之间进行数据共享(可能xmljson文件),并且通信一次就像"一对多双向".

通过一些经验和文章,我发现了以下方法.

  1. Wi-Fi Direct
  2. 空投
  3. 蓝牙(通过创建主站和从站)
  4. Bonjour SDK.
  5. Bump API(已于2014年1月关闭)

有人可以建议最好的方式来满足我的要求,这是一个很好的方法吗?

bonjour one-to-many data-sharing ios airdrop

1
推荐指数
1
解决办法
3320
查看次数

NsdManager发现在Android 9上不起作用

我已经尝试了很长时间,让NsdManager发现功能在Android 9上运行。它可以在此之前的任何Android版本上正常运行。

为了进行测试,我使用了这个简单的代码段,清单中有“ INTERNET”的权限。

var nsdManager = context.getSystemService(Context.NSD_SERVICE) as NsdManager

nsdManager.discoverServices("_https._tcp", NsdManager.PROTOCOL_DNS_SD, object: NsdManager.DiscoveryListener {
    override fun onDiscoveryStarted(serviceType: String?) {
        println("DEBUG: onDiscoveryStarted $serviceType") 
    }
    override fun onDiscoveryStopped(serviceType: String?) {
        println("DEBUG: onDiscoveryStopped $serviceType") 
    }
    override fun onServiceFound(serviceInfo: NsdServiceInfo?) {
        println("DEBUG: onServiceFound $serviceInfo") 
    }
    override fun onServiceLost(serviceInfo: NsdServiceInfo?) {
        println("DEBUG: onServiceLost $serviceInfo") 
    }
    override fun onStartDiscoveryFailed(serviceType: String?, errorCode: Int) {
        println("DEBUG: onStartDiscoveryFailed $serviceType $errorCode") 
    }
    override fun onStopDiscoveryFailed(serviceType: String?, errorCode: Int) {
        println("DEBUG: onStopDiscoveryFailed $serviceType $errorCode") 
    }
})
Run Code Online (Sandbox Code Playgroud)

当执行此代码时,我在日志中看不到任何调试或错误消息。

使用Wireshark,我可以看到广播的mDNS Standard查询“ _https._tcp.local”以及来自所有预期设备的所有相应响应。由于从未调用过函数“ …

android mdns bonjour nsdmanager android-9.0-pie

1
推荐指数
1
解决办法
586
查看次数

NSNet服务问题

我正在尝试在iOS设备和Mac之间建立Bonjour连接.发现彼此工作很好,但我遇到了问题setTXTRecordData:.它总是失败(BOOL返回NO)......

_serviceInstances创建:

-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing
{
    [aNetService retain];

    [aNetService setDelegate:self];
    [aNetService startMonitoring];

    [aNetService performSelectorOnMainThread:@selector(resolve) withObject:nil waitUntilDone:YES];
[_serviceInstances addObject:aNetService];
}
Run Code Online (Sandbox Code Playgroud)

发送尝试:

NSNetService*service = [_serviceInstances objectAtIndex:[servicesTable selectedRow]];

[service setDelegate:self];

NSDictionary*txtRecordDataDictionary = [NSDictionary dictionaryWithObject:@"2" forKey:@"Version"];

if (service)
{
    BOOL success = [service setTXTRecordData:[NSNetService dataFromTXTRecordDictionary:txtRecordDataDictionary]];   

    if (!success)
    {
        NSRunCriticalAlertPanel(@"Sync Error", @"Failed to contact Client. Please restart Carbon on your iPad and try again.", @"OK", nil, nil);
    }

    NSLog(@"Service: %@",service);
}
Run Code Online (Sandbox Code Playgroud)

NSLog消息输出Service: <NSNetService 0x441b40> local. _test._tcp. David's iPad正确.

iOS代码: …

iphone macos bonjour objective-c ios

0
推荐指数
1
解决办法
3254
查看次数

一个端口上有多个连接

我使用pidgin,A,B和C运行多个bonjour客户端.
当B和C与A通信时,我发现A使用相同的端口(通过wireshark我可以看到数据包)用于MDNS和通信,
但是B和C,每个有两个不同的端口,一个用于MDNS,一个用于套接字连接.
A如何工作,为什么它只能与一个端口一起工作?一个端口如何提供多个连接?
注意:如果它是多线程的,那么当它接受连接时它会创建一个带有另一个空闲端口的新套接字,但我看到来自wireshark的数据包,客户端A只使用相同的端口进行通信和MDNS.

sockets port bonjour

0
推荐指数
1
解决办法
9642
查看次数