tcp - F# (TcpClient) 中的 netcat 代码段等效项

标签 tcp f# tcpclient utf

我在 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/

相关文章:

networking - tcp reno、newreno 和慢启动

python - ZeroMQ 无法在 [0.0.0.0 :5555] - address already in use. 上的 Docker 上进行 .bind() 为什么?

wcf - 在其所属进程退出后,如何释放 "daemon"TCP 端口监听器?

datetime - F# 中的 System.DateTime 格式

f# - 传递解析为多种类型的通用函数的最佳方法是什么

c# - 使用 TcpClient 类 C# 的异步套接字客户端

c# - 不允许异步锁

javascript - Uncaught Error : connect ETIMEDOUT (net. 套接字)

c# - 测试TCP连接的Java等效方法

f# - Microsoft.FSharp.Text.ArgParser 在哪里?