[英]TCP server haskell string comparison
我有一個用Haskell編寫的小服務器,當我向它發送內容時,它應該評估發送的內容是否與auth函數中的密碼“password”相匹配,但它永遠不是真的。 我可以看到發送的消息通過,因為它打印在'putStrLn msg'。 我嘗試了幾個東西,不同的功能,在haskell中使用'case of',.... 我不確定我做錯了什么,它只是字符串比較沒有?
提前致謝!
import Network
import Control.Concurrent
import System.IO
import Data.List
import Control.Monad
main :: IO ()
main = withSocketsDo $ do
sock <- listenOn $ PortNumber 4242
loop sock
loop :: Socket -> IO ()
loop sock = do
(h,_,_) <- accept sock
forkIO $ auth h
loop sock
auth :: Handle -> IO ()
auth h = do
msg <- hGetLine h
putStrLn msg
when (msg == "password") $ do
server h
server :: Handle -> IO ()
server h = do
hPutStr h "connected"
putStrLn "connected"
msg <- hGetLine h
putStrLn msg
hClose h
我在這看到一些問題。
在hPutStr h "connected"
之后,您應該刷新Handle
。 IIRC Handle
被緩沖。 所以一切都很好,但是由於緩沖,你在客戶端看不到connected
消息。 (增加:使用hFlush h
)
一些客戶端(例如telnet
)使用\\r\\n
作為行尾標記,但hGetLine
期望\\n
。 所以你可能會收到password\\r
而不是password
。 嘗試使用print msg
而不是putStrLn msg
來查看您收到了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.