huiwenyuedu 2022-12-24 08:26 采纳率: 28.6%
浏览 135
已结题

使用cocoaHTTPServer实现wifi传书时浏览器无法显示

在开发一个iOS电子书阅读器,想实现wifi传书功能,从GitHub下载了cocoaHTTPServer,依照网上的介绍,导入到了项目中,在实现wifi传书功能时,参考了网上的代码,适当作了修改,代码如下:

 @IBAction func wifichuanshu1(_ sender: UIButton) {
            var localHttpServer=HTTPServer()
        func setupLocalHttpServer() {
            //       setupLocalHttpServer()\
            localHttpServer = HTTPServer.init()
            localHttpServer.setType("_http.tcp")
            let webPath=Bundle.main.resourcePath?.appending("/web")
            print("web \(String(describing: webPath))")
            localHttpServer.setDocumentRoot(webPath)
           localHttpServer.setConnectionClass(MyHTTPConnection.classForCoder())
            // [httpServer setConnectionClass:[MyHTTPConnection class]];
            startServer()
            
        }
            setupLocalHttpServer()
        
            func startServer() {
                
                do {
                    try localHttpServer.start()
                    
                    let port = localHttpServer.listeningPort()
                    print("port \(port)")
                    if let ip = getWifiIP() {
                        ipdizhi1.text="address http://\(ip):\(port)"
                        print("address http://\(ip):\(port)")
                    }
                    else{
                        Ipdizhi1.text=“获取ip地址失败”
                        
                    }
                    
                } catch let err {
                    print("error \(err)")
                }
                
                
                
            }
            
        //获取本机无线局域网ip
            func getWifiIP() -> String? {
                    
                   var address: String?
                   var ifaddr: UnsafeMutablePointer<ifaddrs>? = nil
                   guard getifaddrs(&ifaddr) == 0 else {
                       return nil
                   }
                   guard let firstAddr = ifaddr else {
                       return nil
                   }
                    
                   for ifptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) {
                       let interface = ifptr.pointee
                       // Check for IPV4 or IPV6 interface
                       let addrFamily = interface.ifa_addr.pointee.sa_family
                       if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {
                           // Check interface name
                           let name = String(cString: interface.ifa_name)
                           if name == "en0" {
                               // Convert interface address to a human readable string
                               var addr = interface.ifa_addr.pointee
                               var hostName = [CChar](repeating: 0, count: Int(NI_MAXHOST))
                               getnameinfo(&addr,socklen_t(interface.ifa_addr.pointee.sa_len), &hostName, socklen_t(hostName.count), nil, socklen_t(0), NI_NUMERICHOST)
                               address = String(cString: hostName)
                           }
                       }
                   }
                    
                   freeifaddrs(ifaddr)
                   return address
               }
    }
    

现在的问题是,在xs max上真机测试时,能显示ip地址和端口号,但在电脑浏览器键入访问时,显示“192.168.1.6已拒绝连接”,不知问题出在哪里,该怎么解决,我想是不是需要在手机上作什么设置,请各位赐教,谢谢!

  • 写回答

8条回答 默认 最新

  • Jackyin0720 2022-12-24 09:15
    关注

    你的访问是内网还是外网?如果是外网还是需要看下公司对于网络权限的设置,有可能是不是做了限制。
    这里有篇实例就讲述了【iOS利用CocoaHTTPServer实现wifi局域网传输文件到iphone】,链接:https://www.jianshu.com/p/2852d7875fe2

    评论 编辑记录
    1人已打赏

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月29日
  • 赞助了问题酬金100元 12月27日
  • 赞助了问题酬金50元 12月26日
  • 创建了问题 12月24日