使用cocoaHTTPServer实现wifi传书时浏览器显示拒绝连接

在开发一个iOS电子书阅读器,想实现wifi传书功能,从GitHub下载了cocoaHTTPServer,依照网上的介绍,导入到了项目中,在实现wifi传书功能时,找了网上相关的代码,https://www.jianshu.com/p/2852d7875fe2,适当作了修改,代码如下:

@IBAction func wifichuanshu1(_ sender: UIButton) {
        
        var localHttpServer=HTTPServer()
        func setupLocalHttpServer() {
            //       setupLocalHttpServer()\
            localHttpServer = HTTPServer.init()
            localHttpServer.setType("_http.tcp")
            let webPath = Bundle.main.path(forResource: "web", ofType: nil)
            let webPath1=String(describing: webPath)
            print("web \(webPath1)")
            localHttpServer.setDocumentRoot(webPath)
            localHttpServer.setConnectionClass(MyHTTPConnection.classForCoder())
            //               [httpServer setConnectionClass:[MyHTTPConnection class]];
            startServer()
            
        }
        setupLocalHttpServer()
        
        func startServer() {
            
            do {
                try localHttpServer.start()
                
                //let port = localHttpServer.listeningPort()
                localHttpServer.setPort(13131)
                //let port = localHttpServer.listeningPort()
                let port=13131
                print("port \(port)")
                if let ip = getWifiIP() {
                    ipdizhi1.text="address http://\(ip):\(port)"
                    print("address http://\(ip):\(port)")
                    
                }
                else{
                    let alertController = UIAlertController(title: "ip地址获取失败",
                                                            message: nil, preferredStyle: .alert)
                    //显示提示框
                    self.present(alertController, animated: true, completion: nil)
                    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 10) {
                        self.presentedViewController?.dismiss(animated: false, completion: nil)}
                    
                }
                
            } catch let err {
                print("error \(err)")
            }
            
            
            
        }
        
        //获取本机无线局域网ip
        func getWifiIP() -> String? {
            
            var address: String?
            var ifaddr: UnsafeMutablePointer? = 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已拒绝连接”,不知问题出在哪里,该怎么解决,我想是不是需要在手机上作什么设置,请各位赐教,谢谢!
App Transport Security Settings中Allow Arbitrary Loads已设置为yes,开发者账号也已续期,申请了证书,导入了profile 文件,在手机使用无线局域网和蜂窝网络的app列表中已可找到我开发中的app,允许了无线局域网,浏览器还是显示“已拒绝连接”,httpserver应该已经启动,没有显示错误信息,是需要什么设置呢,还是需要在MyHTTPConnection中写什么代码,对这块我完全不熟悉,请各位指教,谢谢!


1.
客户端和服务端的IP地址不匹配:如果你的客户端和服务端的IP地址不匹配,浏览器就会显示"拒绝连接"。你可以检查你的代码,确保客...
2.
服务端没有正确启动:如果你的服务端没有正确启动,客户端就无法连接到服务端。你可以检查你的服务端代码,确保已经调用了HTTPServer的start...
3.
服务端端口被占用:如果你的服务端端口被其他程序占用,客户端就无法连接到服务端。你可以使用命令"lsof -i :端口号".

尝试下:

1、找到你使用的浏览器中的【代理服务器】选项,切换为【不使用代理服务器】。
2、同时按下【win+R】键,打开运行。
3、输入【control】,按下回车键。
4、打开控制面板,点击【查看网络状态和任务】
点击【连接】后面的按钮,这里是点击【以太网】。
点击【属性】。
找到【Internet协议版本4】,双击打开。
选择【自动获取IP地址】和【自动获得DNS服务器地址】,这样就可以正常使用浏览器了。

请尝试参考官方的代码

img

可能的原因以及解决建议:

1.客户端和服务端的IP地址不匹配:如果你的客户端和服务端的IP地址不匹配,浏览器就会显示"拒绝连接"。你可以检查你的代码,确保客户端和服务端的IP地址正确。
2.服务端没有正确启动:如果你的服务端没有正确启动,客户端就无法连接到服务端。你可以检查你的服务端代码,确保已经调用了HTTPServer的start方法,并且服务端没有抛出任何异常。如果你在启动服务端时遇到了问题,可以在代码中加入打印语句,查看服务端启动过程中发生了什么。
3.服务端端口被占用:如果你的服务端端口被其他程序占用,客户端就无法连接到服务端。你可以使用命令"lsof -i :端口号"检查端口是否被占用,如果被占用,可以尝试更换端口号。
4.服务端的防火墙设置问题:如果你的服务端的防火墙设置了禁止外部访问,客户端就无法连接到服务端。你可以检查你的防火墙设置,确保对于服务端端口的访问被允许。

在浏览器中访问时显示 "拒绝连接" 可能是因为您的服务器没有正常启动。您可以在启动服务器之前检查是否有错误发生,例如:

在 do-catch 语句中打印错误信息,查看是否有其他错误发生。
在浏览器中输入 http://localhost:13131,查看服务器是否在本机上正常运行。
检查您设置的端口是否为防火墙保护的端口。您可以尝试将端口设置为其他端口,例如 8080。
在启动服务器时,检查您是否设置了正确的文档根目录。您可以使用 print 语句打印文档根目录路径,确保它存在并且可以访问。
此外,您还可以尝试使用其他工具(例如 Telnet)来连接服务器,查看是否存在其他问题。希望这些建议能帮助您解决问题。

在你的代码中,你已经使用了cocoaHTTPServer库来实现了一个本地HTTP服务器。通过调用localHttpServer.setDocumentRoot(webPath)来设置服务器的文档根目录,并通过localHttpServer.start()来启动服务器。

在你的代码中,你还通过调用getWifiIP()来获取本机的无线局域网IP地址,并在ipdizhi1.text中显示出来。

基于以上描述,我们可以得出以下结论:你已经实现了一个简单的iOS应用,可以通过本地HTTP服务器来提供文件下载。用户可以通过浏览器访问http://[IP地址]:[端口号]来下载本地HTTP服务器中的文件。

希望这些信息能帮助你。

浏览器拒绝连接请求的原因大概有几种情况:第一,自身网路故障导致拒绝连接请求;第二,ip地址错误导致拒绝连接请求;第三,DNS错误导致拒绝连接请求;第四,对方服务器崩溃导致拒绝连接请求(一般这种情况很小)因此解决方法,首先打开浏览器,点击“三横”图标,找到“代理服务器选项”选择“不使用代理服务器”关闭浏览器后,再次重启浏览器

在浏览器中输入 http://localhost:13131,查看服务器是否在本机上正常运行

浏览器点那个星,找到扩展,还得勾选上开发者模式啊

http://xn--localhost-375nzdy56btt3fhkn/

app已经获取了当前使用的wifi ssid无线局域网名,之后该怎么做,请各位指教,谢谢!

首先,你可以尝试调试代码,看看哪一步出了问题。你可以加上一些打印语句,来观察程序的执行情况。你可以打印出 localHttpServer 和 webPath 的值,看看是否有问题。

其次,我注意到你的代码中有一个 MyHTTPConnection 类,但是没有定义这个类。在使用 cocoaHTTPServer 的时候,需要使用一个继承了 HTTPConnection 类的子类来处理请求和响应。如果你的 MyHTTPConnection 类没有实现相应的功能,可能会导致程序出现问题。

另外,你还需要注意 iOS 中有一些限制,可能会影响你的程序的正常运行。例如,你的应用可能需要获得网络访问权限,才能正常的启动服务器。你还需要注意 iOS 中有一些网络访问的限制,例如不能使用端口号小于 1024 的端口。

此外,你还可以查看 cocoaHTTPServer 的文档和示例代码,了解如何正确使用这个库。你也可以在网上搜索相关的教程和文章,帮助你解决问题。