- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个扫描器类来扫描所有可用的 bonjour 服务的列表,用户可以选择搜索某个 bonjour 服务名称中的所有设备。
一切正常!除了当我从电缆上取下我的 iphone 时,我无法看到所有的 bonjour 服务。
有什么想法吗?
注意:我的 iphone 和我的笔记本电脑都通过同一网络中的 wifi 连接。但是 iphone 似乎通过我的笔记本电脑检测到 bonjour 服务。
这是我的类(class),但我确定它与我的类(class)实现无关。
class ScannerViewController: UIViewController {
@IBOutlet weak var serviceTextField: UITextField!
@IBOutlet weak var transportLayerTextField: UITextField!
@IBOutlet weak var domainTextField: UITextField!
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var allBonjourBtn: UIButton!
@IBOutlet weak var searchBtn: UIButton!
let searchForAllString = "_services._dns-sd._udp."
var services = [NetService](){
didSet{
self.tableView.reloadData()
}
}
private lazy var serviceBrowser = NetServiceBrowser()
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.estimatedRowHeight = 150
self.tableView.rowHeight = UITableViewAutomaticDimension
self.serviceBrowser.delegate = self
self.searchBtn.makeCircularEdges()
self.allBonjourBtn.makeCircularEdges()
}
@IBAction func allBonjourPressed(_ sender: UIButton) {
self.startBrowsing(all: true)
}
@IBAction func searchPressed(_ sender: UIButton) {
self.startBrowsing(all: false)
}
func setBrowserObj() -> (serviceName: String, transportLayer: String, domain: String){
let sName = (self.serviceTextField?.text ?? "").trim
let tl = (self.transportLayerTextField?.text ?? "").trim
let text = (self.domainTextField?.text ?? "").trim
let domain = (text == "" ? text: "\(text).")
print("\(sName).\(tl).", domain)
return (serviceName: "_\(sName)", transportLayer: "_\(tl)", domain: "\(domain)")
}
func startBrowsing(all: Bool){
self.hideKeyboard()
self.serviceBrowser.stop()
self.services = []
let result = self.setBrowserObj()
self.serviceBrowser.delegate = self
if all {
self.serviceBrowser.searchForServices(ofType: searchForAllString, inDomain: "\(result.domain)")
}else{
self.serviceBrowser.searchForServices(ofType: "\(result.serviceName).\(result.transportLayer).", inDomain: "\(result.domain)")
}
}
}
extension ScannerViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.services.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") else{
return UITableViewCell()
}
guard self.services.count > 0 else{
return cell
}
let service = self.services[indexPath.row]
cell.textLabel?.text = "Name: \(service.name)\nDomain: \(service.domain)\nPort: \(service.port)"
return cell
}
}
extension ScannerViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
let nextTag = textField.tag + 1
if let nextTextField = textField.superview?.viewWithTag(nextTag) {
nextTextField.becomeFirstResponder()
}else{
self.hideKeyboard()
}
return false
}
func hideKeyboard() {
self.serviceTextField?.resignFirstResponder()
self.transportLayerTextField?.resignFirstResponder()
self.domainTextField?.resignFirstResponder()
}
}
extension ScannerViewController: NetServiceBrowserDelegate, NetServiceDelegate {
func netServiceBrowser(_ browser: NetServiceBrowser, didNotSearch errorDict: [String : NSNumber]) {
print("Error serching for service")
print("Errors: \(errorDict.keys)\n")
}
func netServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool) {
service.delegate = self
self.services.append(service)
}
func netServiceBrowser(_ browser: NetServiceBrowser, didRemove service: NetService, moreComing: Bool) {
service.delegate = nil
self.removeServiceFromList(serviceObj: service)
}
///Removes the service from the current list.
func removeServiceFromList(serviceObj: NetService){
for (index, sev) in self.services.enumerated() {
if sev == serviceObj {
self.services.remove(at: index)
}
}
}
}
更新:
我正在使用命令行检查可用的 bonjour 服务,我注意到:
运行 dns-sd -B _services._dns-sd._udp local.
将列出一些我认为仅从我的机器广播的服务。
运行 dns-sd -B _ipp._tcp local.
或 dns-sd -B _http._tcp local.
将列出所有使用 ipp
/http
服务。
真正的问题是为什么当我使用命令 dns-sd -B _services._dns-sd._udp 时
???根据我所有的在线阅读,每个人都说这个命令应该列出网络上所有可用和事件的 bonjour 服务!但这不是发生在我身上的事情。ipp
或 http
服务类型没有出现本地。
注意:我通过 wifi 连接到网络,但由于没有适配器,我无法使用电缆。
附上结果快照。
更新 2
我终于明白了。我想问题出在工作中的 wifi 网络阻止了服务列表。因为当我在家尝试时,我能够毫无问题地看到所有 bonjour 服务。
最佳答案
我终于弄明白了,是我工作中的 wifi 网络阻止了它。当我在家里尝试时,一切都按预期工作。
感谢大家帮我解决了这个问题
关于ios - Swift:如果我的 iphone 没有连接到我的笔记本电脑,我就看不到所有 bonjour 服务列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47292802/
我正在尝试从 Linux 远程登录到 Windows PC,但显示错误“登录失败”。 这是我的 Python 脚本。我正在使用 pexpect 模块。我也尝试过使用 telnetlib 但同样的错误:
大多人在windows平台用的tomcat都是免安装版本的,很自然想到复制几份目录,就是在同一个电脑上跑多个tomcat服务了。实际上是不可以的。经过如下方法就可以实现统一台服务器(电脑)上运行多个
正负号是一个不常用的符号,很多小伙伴不知道怎么打出来,打出来确实有点麻烦,很多小伙伴不知道怎么弄,今天小编就给大家带来了轻松便捷的方法吧。 正负号怎么打出来 方法1、“&plu
在一项作业中,我被要求创建一个 [7] x [7] 矩阵,以及一个与计算机对战的井字棋游戏。玩家是 X,计算机是 O。[1][1] 是选择 1,[1][3] 是选择 2,[1][5] 是选择 3,[3
我想知道如何开发应用程序/服务器。我的安卓手机会在我说话时录制我的声音,并将其发送到 PC,然后使用 PC 的扬声器播放。 我想我需要一个在计算机上运行的媒体服务器来接收我的声音,然后使用手机上已有的
我正在开发一个使用蓝牙玩的安卓游戏应用程序。在搜索蓝牙设备时,结果包含移动设备和 mac pc/笔记本电脑。我只想在结果列表中列出移动设备。是否可以确定检测到的设备是否为移动设备? 最佳答案 当你有
在学习 Meteor 框架的过程中,我正在将 Yik Yak 移动应用程序重新创建为 Web 应用程序。但该应用程序是完全匿名的,没有用户帐户,但您仍然只能对帖子投赞成票或反对票一次。如何做到这一点?
我花了一些时间寻找解决方案。我已经使用 MacPorts 在我的 mac 上重新安装了 Vim 好几次。 vim --version 命令显示 +clipboard 和 +xterm_clipboar
我是一名优秀的程序员,十分优秀!