String 在发送和haskell`字符串时使用哪种高级接口而不是网络`
模块的第一行文档内容如下: 保留此模块是为了向后兼容。鼓励新用户改用Network.SocketString 在发送和haskell`字符串时使用哪种高级接口而不是网络`,string,haskell,networking,String,Haskell,Networking,模块的第一行文档内容如下: 保留此模块是为了向后兼容。鼓励新用户改用Network.Socket 网络库具有允许以方便的方式发送和接收字符串的功能,例如: h <- connectTo "localhost" (PortNumber 9090) -- ... line <- hGetLine h 这是相当低的级别,需要对字符串进行编码/解码。所以我的问题是,如果我只想通过套接字发送和接收字符串(带有一些编码),那么如果网络不是一个选项,那么完成这项任务的备选方案是什么
网络
库具有允许以方便的方式发送和接收字符串的功能,例如:
h <- connectTo "localhost" (PortNumber 9090)
-- ...
line <- hGetLine h
这是相当低的级别,需要对字符串进行编码/解码。所以我的问题是,如果我只想通过套接字发送和接收字符串(带有一些编码),那么如果网络
不是一个选项,那么完成这项任务的备选方案是什么
编辑:虽然管道是管道是很好的选择,但我正在从事的项目大量使用了这些网络
功能,因此,我最终开发了一个用于发送和接收文本的,使用了与网络库中类似的功能。您不能使用socketToHandle
将套接字转换为句柄
并在其上使用hGetLine
吗?我可能会使用流媒体库来处理解码和行处理分裂<例如,代码>管道
+通过testring管道
+管道文本
,或者使用socketToHandle
的Conduit等价物可以解决部分问题,但这将使我暴露在我试图避免的[this bug]()。嗯,是的,那么,最好的选择可能是带有Data.conduct.Network或pipes Network的额外导管。前者的功能似乎更完整一些。
addrinfos <- getAddrInfo Nothing (Just "") (Just "9090")
let serveraddr = head addrinfos
sock <- socket (addrFamily serveraddr) Stream defaultProtocol
connect sock (addrAddress serveraddr)
-- ...
msg <- recv sock Size
-- What `Size` should be? The line above should be probably repeated until all the data is received.