我编写了这个简单的原型(prototype)客户端来向我正在开发的服务器发送命令。它可以在 GHCi 中完美运行,但编译版本会缓冲输入的所有内容,直到我输入“退出”并且程序退出。那时所有的输入文本都会被发送。
我究竟做错了什么?为什么编译时会不同?
更新: 如果使用 ghc Main.hs
编译,它会按预期工作。通过 Package -> Build 使用 Leksah 编译时会出现问题。有人知道如何获取 Leksah 正在使用的命令行吗?
系统信息:OSX 10.6、GHC 7.0.3、网络 2.3.0.2
module Main (
main
) where
import System.IO
import Network
main = do
hServer <- connectTo "localhost" (PortNumber 7000)
hSetBuffering hServer NoBuffering
loop hServer
hClose hServer
where loop :: Handle -> IO ()
loop hServer = do
s <- getLine
hPutStrLn hServer s
case s of "quit" -> return ()
otherwise -> loop hServer
最佳答案
Leksah 使用“cabal build”,旧版本使用“runhaskell Setup build”。
关于networking - TCP 在 GHCi 中工作,在用 Leksah 编译的程序中缓冲直到程序退出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5890054/