簡體   English   中英

TCP服務器haskell字符串比較

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM