我在 Unix 中使用 netcat
工具执行此操作:
$ netcat gh05.geekhosters.com 50001
{ "id": 0, "method": "server.version", "params": [ "1.9.5", "0.6" ] }
在撰写本文时,服务器回复我的结果是:
{"id": 0, "result": "1.0"}
太棒了!现在我想在 F# 中做同样的事情。
我尝试过这个:
let rec asyncPrintResponse (stream: System.Net.Sockets.NetworkStream) =
async {
let response = stream.ReadByte() |> Char.ConvertFromUtf32
Console.Write(response)
return! asyncPrintResponse stream
}
let TcpClientTest() =
let client = new System.Net.Sockets.TcpClient()
client.Connect("gh05.geekhosters.com", 50001)
let stream = client.GetStream()
let bytes = System.Text.Encoding.UTF32.GetBytes("{ \"id\": 0, \"method\": \"server.version\", \"params\": [ \"1.9.5\", \"0.6\" ] }\n");
asyncPrintResponse stream |> Async.Start
stream.Write(bytes, 0, bytes.Length)
stream.Flush()
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(60.0))
但是上面的打印结果:
{"error": "bad JSON"}
我做错了什么?
最佳答案
好吧,问题是我使用的是 UTF32 而不是 UTF8!
关于tcp - F# (TcpClient) 中的 netcat 代码段等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44256724/