TCP在GHCi中工作,在Leksah编译的程序中缓冲直到程序退出

时间:2011-05-04 21:25:06

标签: networking haskell tcp ghci leksah

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

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

更新:如果使用ghc Main.hs进行编译,它会按预期工作。使用Leksah通过Package编译时会出现问题 - >建立。任何人都知道如何使用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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

嗯,看来Leksah实际上并没有按照我的想法构建应用程序。我必须在没有hSetBuffering调用的情况下运行旧代码。一个干净的&amp; rebuild已将其整理出来。向所有人致歉并感谢您的时间和帮助。

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