我想从头开始创建基本的HTTP客户端,使用SWIFT学习,以了解互联网上http的发送者和接收者是如何工作的.现在,我在本地主机上try ,我已经try 了以下代码
import Foundation
import Darwin
final class Client {
let host: String
let port: UInt16
init(host: String, port: UInt16) {
self.host = host
self.port = port
}
func get(_ completionHandler: @escaping() -> Void) {
// Create a socket
let sock = socket(AF_INET, SOCK_STREAM, 0)
var serveraddr = sockaddr_in()
serveraddr.sin_family = sa_family_t(AF_INET)
serveraddr.sin_port = self.port
serveraddr.sin_addr.s_addr = inet_addr(self.host)
// Connect to the server
print("Connecting....")
withUnsafePointer(to: &serveraddr) { sockaddrInPtr in
let sockaddrPtr = UnsafeRawPointer(sockaddrInPtr).assumingMemoryBound(to: sockaddr.self)
let connection = connect(sock, sockaddrPtr, socklen_t(MemoryLayout<sockaddr_in>.size))
if connection == 0 {
// Form an HTTP GET request
let request = "GET / HTTP/1.1\r\nHost: \(self.host)\r\n\r\n"
let bytes = [UInt8](request.data(using: .utf8)!)
// Send the request over the socket
send(sock, bytes, request.count, 0)
/*
// Receive and print the response
var response = [UInt8](repeating: 0, count: 1024)
let bytesRead = recv(sock, &response, response.count, 0)
if bytesRead > 0 {
if let httpResponse = String(bytes: response, encoding: .utf8) {
print(httpResponse)
}
}
// Close the socket
close(sock)
*/
} else {
print("not connected \(connection)")
}
}
}
}
Usage:个
let client: Client = .init(host: "127.0.0.1", port: 8080)
client.get {
print("GET request successfully executed!")
}
但问题是,Cleint的出口是print
101
我如何解决此问题?