Thank you for such detailed answer!) I came to thought that maybe it'll be better to find host and then communicate by host, not IP. Just adding ".local" to the host name solved the problem. So I've already managed how to find host name. Something like this:
swift
class ServiceAgent : NSObject, NetServiceDelegate {
func netServiceDidResolveAddress(_ sender: NetService) {
if let data = sender.txtRecordData() {
let dict = NetService.dictionary(fromTXTRecord: data)
}
}
}
class BrowserAgent : NSObject, NetServiceBrowserDelegate {
var currentService:NetService?
let serviceAgent = ServiceAgent()
func netServiceBrowser(_ browser: NetServiceBrowser, didFindDomain domainString: String, moreComing: Bool) {
print("domain found: \(domainString)")
}
func netServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool) {
Lamp.lampHost = service.name+".local"
self.currentService = service
service.delegate = self.serviceAgent
service.resolve(withTimeout: 5)
}
}
let agent = BrowserAgent()
let browser = NetServiceBrowser()
browser.stop()
browser.delegate = agent
browser.schedule(in: RunLoop.current, forMode: .default)
browser.searchForServices(ofType: "_http._tcp", inDomain: "local.")
RunLoop.main.run()
But so far this code after finding my host name just freezing my app forever.