4

我编写了这个简单的原型客户端来向我正在开发的服务器发送命令。它可以在 GHCi 中完美运行,但编译后的版本会缓冲输入的所有内容,直到我输入“quit”并且程序退出。那时所有的输入文本都会被发送。

我究竟做错了什么?为什么编译时会有所不同?

更新:如果使用ghc Main.hs. 使用Leksah通过 Package -> Build 编译时会出现问题。有人知道如何获取 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
4

2 回答 2

1

嗯,似乎 Leksah 并没有真正构建应用程序,而我认为它是。我一定是在没有hSetBuffering调用的情况下运行旧代码。清洁和重建已经解决了它。道歉并感谢大家的时间和帮助。

编辑:找到它 - 如果其他人对此感到困惑,当点击 package->build 时,如果 Leksah 处于调试/ghci 模式,它不会生成已编译的应用程序。

于 2011-05-05T09:16:44.293 回答
1

Leksah 使用“cabal build”,旧版本“runhaskell Setup build”。

于 2011-05-05T06:03:11.700 回答