如何在 F# 中使用 TcpListener NetworkStream?

Posted

技术标签:

【中文标题】如何在 F# 中使用 TcpListener NetworkStream?【英文标题】:How to use TcpListener NetworkStream in F#? 【发布时间】:2019-01-19 01:25:26 【问题描述】:

我正在尝试从此处https://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener(v=vs.110).aspx 移植 C# 示例代码,但在读取数据部分时遇到了问题。 Byte[] bytes = new Byte[256];应该怎么用F#写?

open System
open System.Net
open System.Net.Sockets

let ipAddress = IPAddress.Parse("127.0.0.1")
let port = 1000

let tcpListener = TcpListener(ipAddress, port)

let rec listen() =
    printfn "Listening..."
    let tcpClient = tcpListener.AcceptTcpClient()
    printfn "Connected!"
    let networkStream = tcpClient.GetStream()
    // port Byte[] bytes = new Byte[256]; to F#
    listen()

try
    tcpListener.Start()
    listen()
with
    | error -> printfn "%s" error.Message

Console.Read() |> ignore

【问题讨论】:

【参考方案1】:

您可以使用Array.zeroCreate 函数创建一个空数组。将其添加到您的代码中,listen 函数将如下所示:

let rec listen() =
    let tcpClient = tcpListener.AcceptTcpClient()
    let networkStream = tcpClient.GetStream()
    let buffer = Array.zeroCreate 256
    let read = networkStream.Read(buffer, 0, 256)
    // Do something with 'buffer' and 'read'
    listen()

【讨论】:

你可能想在 AcceptTcpClient 调用分叉线程之后踢掉所有东西。否则,您的服务器将在您处理时停机。

以上是关于如何在 F# 中使用 TcpListener NetworkStream?的主要内容,如果未能解决你的问题,请参考以下文章

为啥必须在 UWP 中使用 StreamSocketListener 而不是 TcpListener,尽管 UWP 是 .NET Core 的子集,而 TcpListener 在 UWP 中可用?

如何获取 TcpListener 的公共端口号?

TcpListener:如何监听所有接口上的特定端口?

tcplistener 没有启动

如何设置 TcpListener 始终监听并接受多个连接?

C#里TcpListener的阻塞式服务器