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))
但是当我试着运行一个“你好”服务时
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发送脚本运行时,我看到数据通过。但当我尝试通过swift代码发送数据时,我什么也看不到
关于这一点还有一些注释。如果我更改NWConnection,使其看起来像这样,它就会工作
self.talking = NWConnection(host: "192.168.1.110", port: 31766, using: .udp)
但关键是我失去了“你好”服务。注意:我使用此命令检查bonjour服务是否正在运行
dns-sd -B _wow._udp
returns Browsing for _wow._udp DATE: ---Fri 07 Feb 2020--- 12:08:41.387 ...STARTING... Timestamp A/R Flags if Domain Service Type Instance Name 12:08:41.388 Add 3 1 local. _wow._udp. wow 12:08:41.388 Add 3 4 local. _wow._udp. wow 12:08:41.388 Add 2 5 local. _wow._udp. wow
我用这个命令检查它是否返回正确的参数
dig -p 5353 @224.0.0.251 wow._wow._udp.local. SRV +short
returns 0 0 31766 Home-3.local.
更多的调试。我下载、编译并将其用作我的OS X上的服务器。它可以正常工作
显然,您需要将此源中的tcp更改为UDP,并注释掉反向连接
还尝试通过此操作获取主机+端口
Bonjour: Search for a service by name
然后进行了第二次NWConnection调用,返回了信息
self.talking = NWConnection(host: "Home-3.local.", port: 31766, using: .udp)
这也行,但是回到我最初的问题。我想尝试连接到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)
目前没有回答
相关问题 更多 >
编程相关推荐