在开发一个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服务器地址】,这样就可以正常使用浏览器了。
请尝试参考官方的代码
可能的原因以及解决建议:
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 的文档和示例代码,了解如何正确使用这个库。你也可以在网上搜索相关的教程和文章,帮助你解决问题。