在开发一个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? = 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已拒绝连接”,不知问题出在哪里,该怎么解决,我想是不是需要在手机上作什么设置,请各位赐教,谢谢!
你的访问是内网还是外网?如果是外网还是需要看下公司对于网络权限的设置,有可能是不是做了限制。
这里有篇实例就讲述了【iOS利用CocoaHTTPServer实现wifi局域网传输文件到iphone】,链接:https://www.jianshu.com/p/2852d7875fe2
首先需要确保电脑和iOS设备处于同一个局域网内,否则是无法访问的。
如果确保了电脑和iOS设备处于同一个局域网内,但是仍然无法访问,可能是因为本地服务器没有正常启动。
可以在启动服务器的代码中打印一些日志来查看发生了什么错误。例如,在do-catch块中打印错误信息,或者在服务器启动后打印端口号以确保服务器已经启动。
此外如果使用的是cocoaHTTPServer库,也可以参考该库的文档来查看可能的错误原因和解决方法。
另外可以尝试使用其他网络工具(如curl或者wget)来访问本地服务器,以确定问题是否出在浏览器端。
看起来您在尝试使用cocoaHTTPServer在iOS设备上启动一个HTTP服务器,并通过wifi将文件共享到其他设备。
在您的代码中,您使用了getWifiIP函数来获取iOS设备的IP地址,并在ipdizhi1.text中显示出来。您应该在电脑的浏览器中输入这个IP地址和端口号,就可以访问到iOS设备上的服务器。
但是,如果您在电脑的浏览器中无法访问iOS设备上的服务器,则可能存在一些其他问题。
首先,请确保电脑和iOS设备在同一个局域网中,并且网络连接良好。您可以尝试在电脑和iOS设备之间使用其他应用程序进行网络通信,看看是否有任何问题。
其次,请确保您的代码正确地设置了cocoaHTTPServer的文档根目录。在您的代码中,您使用了 localHttpServer.setDocumentRoot(webPath)来设置文档根目录,请确保webPath的值是正确的,并且包含您希望共享的文件。
如果以上两点都没有问题,您可能需要检查您的代码中是否存在其他错误或问题。您可以尝试在启动服务器时使用try-catch块来捕获错误,然后在控制台中输出错误信息,以帮助您诊断问题。例如,您可以在 startServer 函数中添加以下代码:
do {
try localHttpServer.start()
} catch let error as NSError {
print("Error starting HTTP Server: (error)")
}
这样,如果启动服务器时发生错误,就会在控制台中输出错误信息,您就可以根据这些信息来诊断问题。
另外,您可以尝试使用swift的debugger调试您的代码,以帮助您更好地理解代码的执行流程,并找出可能存在的问题。
希望这些建议能帮助您解决问题。
首先,需要确定cocoaHTTPServer是否已经正确安装并配置。如果已经安装并配置,可以尝试以下步骤来解决浏览器无法显示的问题:
1,检查服务器是否正在运行。可以在代码中添加日志输出来确定服务器是否启动成功。
,2,检查服务器的网络配置。在cocoaHTTPServer中,需要配置服务器的IP地址和端口,并确保本机的浏览器可以访问到该地址。
3,如果上述步骤都没有解决问题,可以尝试使用命令行工具如netstat来检查本机的端口是否被占用。如果端口被占用,则需要重新配置cocoaHTTPServer使用其他端口。
4,如果仍然无法解决问题,可以尝试使用其他网络调试工具,如Wireshark,来检查服务器和浏览器之间的网络通信情况。这可以帮助确定哪里出现了问题。
try localHttpServer.start(),没有输出错误信息,应当已经启动了,我猜可能是网络权限问题,开发者账号已续期,也重新申请了证书,导入了profile文件,之后该怎么做,在手机上应该如何设置,请各位指教,谢谢!
直观上觉得应该在Capabilities增加一项什么权限,但不知是哪项,应该怎么设置,请各位指教,谢谢!
webPath已采用let webPath = Bundle.main.path(forResource: "web", ofType: nil),浏览器还是显示“已拒绝连接”,不知“网络连接”权限怎么启用,请指点,谢谢!
----请注意,你需要在项目设置中启用“网络连接”权限,才能使用cocoaHTTPServer在本地启动HTTP服务器。
看起来代码中的cocoaHTTPServer没有配置正确的文档根目录。
在你的代码中,文档根目录是通过以下行设置的:
let webPath=Bundle.main.resourcePath?.appending("/web")
localHttpServer.setDocumentRoot(webPath)
你可以在调试时使用打印语句来确定webPath的值是否正确。
另外,如果你使用的是Xcode 12,请注意,你需要在项目设置中启用“网络连接”权限,才能使用cocoaHTTPServer在本地启动HTTP服务器。
是否是局域网问题呢?
看起来你正在尝试在iOS设备上设置一个本地HTTP服务器,并从同一网络上的计算机访问它。有几个潜在的问题可能会导致你看到的“连接拒绝”错误:
网络配置:确保iOS设备和计算机都在同一个网络上,并且网络允许两个设备之间通信。您可能需要检查路由器设置,以确保它没有阻塞设备之间的通信。
防火墙:如果iOS设备或计算机启用了防火墙,它可能会阻止连接。您可能需要允许本地HTTP服务器通过防火墙,以便从计算机访问它。
本地HTTP服务器配置:确保本地HTTP服务器配置正确,并运行在iOS设备上。您提供的代码设置了服务器,但不清楚服务器是否正在实际运行。您可能希望添加一些调试语句,以确保服务器正确启动。
地址:确保您使用正确的地址访问服务器。如果使用的是iOS设备的IP地址(如ipdizhi1. 1中所示)。文本字段),确保您使用正确的IP地址。如果地址不正确或已更改,则连接将被拒绝。