Study
Network.framework
Study:「Bonjour Browse」
環境
Client:Java、NetBeans、jmdnsライブラリ
https://github.com/jmdns/jmdns
Server:Swift、Xcode
Client Source Java
package example.java.network;
import java.net.InetAddress;
import javax.jmdns.JmDNS;
import javax.jmdns.ServiceInfo;
public class ExampleBonjourCreateService {
public static void main(String[] args) {
try {
// Create a JmDNS instance
JmDNS jmdns = JmDNS.create(InetAddress.getLocalHost());
// Register a service
ServiceInfo serviceInfo = ServiceInfo.create("_example._tcp.local.", "example", 7777, "example");
jmdns.registerService(serviceInfo);
// Wait a bit
Thread.sleep(25000);
// Unregister all services
jmdns.unregisterAllServices();
}
catch(Exception e) {
System.out.println(e);
}
}
}
build.gradle
compile 'org.openhab.jmdns:jmdns:3.4.2'
Server Source Swift
main.swift
import Foundation
import Network
if #available(OSX 10.15, *) {
let exampleNWBrowser = ExampleNWBrowser()
exampleNWBrowser.startBrowser()
while exampleNWBrowser.running {
sleep(1)
}
} else {
// Fallback on earlier versions
}
ExampleNWBrowser.swift
import Foundation
import Network
@available(OSX 10.15, *)
class ExampleNWBrowser {
public var running = true
private var browser:NWBrowser?
func startBrowser() {
let myQueue = DispatchQueue(label: "ExampleNetwork")
let nWBrowser = NWBrowser(for: .bonjour(type: "_example._tcp", domain: nil), using: NWParameters())
self.browser = nWBrowser
browser!.stateUpdateHandler = {(state) in
print("State:\(state)")
}
browser!.browseResultsChangedHandler = { (results, changes) in
print("browseResultsChangedHandler")
for result in results {
print(result)
}
for change in changes {
print(change)
}
}
browser!.start(queue: myQueue)
print("start")
}
}
Output
start
State:ready
browseResultsChangedHandler
Result(nw: example._example._tcp.local.@[en0], endpoint: example._example._tcplocal., interfaces: [en0], metadata: <none>)
added(Network.NWBrowser.Result(nw: example._example._tcp.local.@[en0], endpoint: example._example._tcplocal., interfaces: [en0], metadata: <none>))
browseResultsChangedHandler
removed(Network.NWBrowser.Result(nw: example._example._tcp.local.@[en0], endpoint: example._example._tcplocal., interfaces: [en0], metadata: <none>))
ResultにEndPointが入っている
EndPointを使用すれば、送信・受信は可能となる