在开发一个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已拒绝连接”,不知问题出在哪里,该怎么解决,我想是不是需要在手机上作什么设置,请各位赐教,谢谢!