iOS 13, Swift 5, Xcode 11
Запуск сервера python udp.
#!/usr/bin/python
import socket
port = 31766
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('', port))
s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1500)
print("listening on port ",port)
while True:
compressed_data, server = s.recvfrom(1500)
print(compressed_data)
Может подключаться с клиентом UDP.
#!/usr/bin/python
import socket
UDP_IP = "192.168.1.1"
UDP_PORT = 31766
MESSAGE = "Hello, World!"
print "UDP target IP:", UDP_IP
print "UDP target port:", UDP_PORT
print "message:", MESSAGE
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
Но когда я пытаюсь запустить службу BONJOUR
dns-sd -R wow _wow._udp local 31766
, я вижу это с моим iOS. Я могу видеть это с OSX. Я могу подключиться без ошибок и отправить данные с этим кодом ....
func connectToUDP(name: String) {
self.talking = NWConnection(to: .service(name: name, type: "_wow._udp", domain: "local", interface: nil), using: .udp)
self.talking?.stateUpdateHandler = { (newState) in
switch (newState) {
case .ready:
print("ready to send")
self.sendUDP("Boo")
default:
print("damn")
}
}
self.talking?.start(queue: .main)
}
Мой сервер работает нормально, потому что я вижу данные, поступающие через него при запуске сценария отправки python. Но когда я пытаюсь отправить данные через быстрый код, я ничего не вижу.
Еще несколько замечаний по этому поводу. Если я изменю NWConnection так, чтобы он выглядел следующим образом, он работал.
self.talking = NWConnection(host: "192.168.1.110", port: 31766, using: .udp)
Но дело в том, что я эффективно теряю службу Bonjour. Примечание. Я использую эту команду, чтобы убедиться, что служба Bonjour запущена.
dns-sd -B _wow._udp
возвращает Просмотр _wow._udp ДАТА: --- Пт 07 фев 2020 --- 12: 08: 41.387. ..STARTING ... Отметка времени A / R флагов, если имя экземпляра службы домена 12: 08: 41.388 Добавить 3 1 локальный. _wow._udp. вау 12: 08: 41.388 добавить 3 4 местных. _wow._udp. вау 12: 08: 41.388 добавить 2 5 местных. _wow._udp. wow
И я использую эту команду для проверки правильности возврата параметров
dig -p 5353 @224.0.0.251 wow._wow._udp.local. SRV +short
возвращает 0 0 31766 Home-3.local.
Больше отладки. Я загрузил, скомпилировал и использовал это как сервер на моей OS X. Он работает.
OSX Network Framework
Очевидно, вам нужно изменить tcp в этом источнике на UDP и закомментируйте обратное соединение.
Также попытался получить хост + порт через
Bonjour: поиск службы по имени
И чем пошел со вторым вызовом для NWConnection, с возвращенной информацией ...
self.talking = NWConnection(host: "Home-3.local.", port: 31766, using: .udp)
Это тоже работает, Но на go вернемся к моему первоначальному вопросу. Я хочу попробовать подключиться к PYTHON серверу , а не к iOS или OSX. Кстати, вот код для браузера под iOS, который находит сервис!
func findUDP() {
print("findUDP")
let parameters = NWParameters()
parameters.includePeerToPeer = true
browser = NWBrowser(for: .bonjour(type: "_wow._udp", domain: "local."), using: parameters)
browser?.browseResultsChangedHandler = { foo, changes in
for change in changes {
switch change {
case .added(let browseResult):
playing = browseResult.endpoint
print(browseResult.endpoint)
default:
print("anything else seen")
}
}
}
self.browser?.start(queue: .main)