【发布时间】:2016-04-02 19:48:46
【问题描述】:
我正在尝试在 F# 中创建一个简单的 HTTP 服务器。但不幸的是,我被困在响应阶段,我正在尝试创建一个简单的 404 响应,但我的浏览器无法获得它,它只会永远加载和加载页面,不会去任何地方。我不知道我的代码哪里出错了。
let responseString = "HTTP/1.1 404 NOT FOUND";
let buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
let processRequest (client: TcpClient) =
async { do printfn "Incoming HTTP request..."
use stream = client.GetStream()
use sr = new StreamReader(stream)
let! content = sr.ReadToEndAsync() |> Async.AwaitTask
do
printfn "Stream contains:\n%s" content
stream.Write(buffer, 0, buffer.Length)
stream.Flush() }
let ip = IPAddress.Parse("127.0.0.1")
let listener = TcpListener(ip, 8080)
let startServer =
async { do listener.Start()
do printfn "Starting server..."
while true do
let! context = listener.AcceptTcpClientAsync() |> Async.AwaitTask
do! processRequest context }
Async.Start startServer
【问题讨论】:
-
您是否尝试过使用调试器单步执行代码?
-
您是否尝试过阅读标准或至少查看一些工作示例?这不是你正在做的 HTTP (没有正确的行结束,没有标题的结尾)。
-
@SteffenUllrich 是的,我已经阅读了许多工作示例,但几乎所有示例都使用
HttpListener类,它可以为我完成大部分工作。 -
如果你想自己实现HTTP,那么你最好阅读standard。但我在第一次评论中给出了一些明显错误的提示。