Локальный веб-сервер отображается пустым в Swift 5 - PullRequest
0 голосов
/ 28 марта 2019

Короче говоря: Я хочу запустить веб-сервер для моего настольного приложения MacOS.Мое приложение намеревается использовать OAuth2.0 и использовать веб-сервер для прослушивания интерфейса обратной связи, используя перенаправление на localhost.После неудачной попытки заставить работать Embassy я решил поискать еще где.Если я на неправильном пути, некоторые указания приветствуются.

Теперь к моей проблеме: Я следую Это руководство для запуска веб-сервера в Swift.Когда я пробую код и перехожу на http://localhost:4000, страница пуста и не отображает HTML-текст.Кажется, что это работало ранее, но ломает для Swift5.У кого-нибудь есть идеи, почему?

Код из руководства (в случае, если сайт отключится для дальнейшего использования):

import Darwin.C

let zero = Int8(0)
let transportLayerType = SOCK_STREAM // TCP
let internetLayerProtocol = AF_INET // IPv4
let sock = socket(internetLayerProtocol, Int32(transportLayerType), 0)
let portNumber = UInt16(4000)
let socklen = UInt8(socklen_t(MemoryLayout<sockaddr_in>.size))
var serveraddr = sockaddr_in()
serveraddr.sin_family = sa_family_t(AF_INET)
serveraddr.sin_port = in_port_t((portNumber << 8) + (portNumber >> 8))
serveraddr.sin_addr = in_addr(s_addr: in_addr_t(0))
serveraddr.sin_zero = (zero, zero, zero, zero, zero, zero, zero, zero)
withUnsafePointer(to: &serveraddr) { sockaddrInPtr in
    let sockaddrPtr = UnsafeRawPointer(sockaddrInPtr).assumingMemoryBound(to: sockaddr.self)
    bind(sock, sockaddrPtr, socklen_t(socklen))
}
listen(sock, 5)
print("Server listening on port \(portNumber)")
repeat {
    let client = accept(sock, nil, nil)
    let html = "<!DOCTYPE html><html><body style='text-align:center;'><h1>Hello from <a href='https://swift.org'>Swift</a> Web Server.</h1></body></html>"
    let httpResponse: String = """
    HTTP/1.1 200 OK
    server: simple-swift-server
    content-length: \(html.count)
    \(html)
    """
    httpResponse.withCString { bytes in
        send(client, bytes, Int(strlen(bytes)), 0)
        close(client)
    }
} while sock > -1

Ожидаемый результат: enter image description here

...