Send Beginners mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://www.haskell.org/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."
Today's Topics:
1. Re: Haskell network sample (Bob Ippolito)
2. Re: Haskell network sample (Sylvain Henry)
----------------------------------------------------------------------
Message: 1
Date: Wed, 21 May 2014 01:06:36 -0700
From: Bob Ippolito <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Haskell network sample
Message-ID:
<CACwMPm9n+3C0Hc1KSnx1NkgOdPugw54=gq_njehb8u7dwud...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
hGetContents reads a handle until EOF, so you've implement a deadlock. The
server is waiting to read a second line, but the client is waiting for the
server to close the socket in order to do the first print. Perhaps you
meant to use hGetLine instead?
On Wed, May 21, 2014 at 12:15 AM, yang.zhao <[email protected]> wrote:
> omg, i test it on Windows, it's ok now. GHC is 7.6.3.
> i really don't konw why this happen..
>
> but there is another question on Windows
>
>
> main = withSocketsDo $ do
> s <- listenOn $ PortNumber $ fromIntegral port
> putStrLn "Listening..."
> (h, _, _) <- accept s
> putStrLn "After accept"
> sline <- hGetLine h
> putStrLn $ "get line from handle"++sline
> hPutStrLn h "xxxx...."
> putStrLn "send first done"
>
> --second recv
> slinea <- hGetLine h
> putStrLn $ "get line from handle"++slinea
>
> hPutStrLn h "yyyy....."
> putStrLn "send second done"
>
> threadDelay 1000000
> --
> cli:
>
> main = withSocketsDo $ do
> h <- connectTo "127.0.0.1" $ PortNumber $ fromIntegral port
> putStrLn "After connect"
> hPutStrLn h "xxx"
> putStrLn "put first to handle done"
>
> bs <- hGetContents h
> putStrLn "read from handle done "
> putStrLn bs
>
> --second send
> hPutStrLn h "yyy"
> putStrLn "put second to handle done"
> bfs <- hGetContents h
>
> putStrLn "read from handle done "
> putStrLn bs
>
>
> the second send and recv is blocking...
> server's output:
> Listening...
> After accept
> get line from handlexxx
> send first done
>
> client's output:
> After connect
> put first to handle done
> read from handle done
> xxx....
>
>
> ..... T_T
>
>
>
>
> 2014-05-21 14:10 GMT+08:00 yang.zhao <[email protected]>:
>
> Here's my new code:
>>
>> $ cat serv.hs
>>
>> import Control.Concurrent
>> import System.IO
>> import Network
>>
>> port :: Int
>> port = 1234
>>
>> main :: IO ()
>> main = withSocketsDo $ do
>> s <- listenOn $ PortNumber $ fromIntegral port
>> putStrLn "Listening..."
>>
>> (h, _, _) <- accept s
>> putStrLn "After accept"
>> sline <- hGetLine h
>> putStrLn "get line from handle"
>>
>> hPutStrLn h sline
>> putStrLn $ "send "++sline
>> threadDelay 1000000
>>
>> hClose h
>> sClose s
>>
>> --------
>> $ cat clie.hs
>>
>> import System.IO
>> import Network
>>
>> port :: Int
>> port = 1234
>>
>> main :: IO ()
>> main = withSocketsDo $ do
>> h <- connectTo "127.0.0.1" $ PortNumber $ fromIntegral port
>> putStrLn "After connect"
>> hPutStrLn h "hello"
>> putStrLn "put hello to handle done"
>> bs <- hGetContents h
>> putStrLn "read from handle done"
>> putStrLn bs
>> hClose h
>>
>>
>> ===
>> one terminal, run ./serv, then run ./clie in another terminal. Output is :
>>
>> $ ./serv
>> Listening...
>> After accept
>>
>> $ ./clie
>> After connect
>> put hello to handle done
>> read from handle done
>>
>>
>> it seems that client has read from then handle, but donesn't read
>> anything, then block.
>> and server donesn't receive anything, still wait for something...
>>
>> ghc version is 7.4.1, because of this?..
>>
>>
>> 2014-05-21 13:57 GMT+08:00 Bob Ippolito <[email protected]>:
>>
>> Not sure why you're having issues, I just tried it on GHC 7.6.3 on Fedora
>>> 20 and it worked fine there as well (both with runhaskell or compiled with
>>> -O).
>>>
>>> I might start adding putStrLn statements to the code to see where it's
>>> unexpectedly blocking, or perhaps use 127.0.0.1 instead of "localhost" in
>>> case the issue is a DNS misconfiguration.
>>>
>>>
>>>
>>> On Tue, May 20, 2014 at 10:51 PM, yang.zhao <[email protected]> wrote:
>>>
>>>> thanks for your replay.
>>>> i run the two program in two different teriminal for sure.
>>>>
>>>> it works for you?
>>>> but why can't run well on my computer.
>>>>
>>>> make me creazy....
>>>>
>>>>
>>>> 2014-05-21 13:47 GMT+08:00 Bob Ippolito <[email protected]>:
>>>>
>>>> How precisely are you trying to run the client? Are you typing it in to
>>>>> the same terminal? If so, then the client is never actually started,
>>>>> because when you type ./cli the input is going to ./serv and not the
>>>>> shell.
>>>>> Try running the client in a separate terminal.
>>>>>
>>>>> It works for me here on Mac OS X 10.9.2 with GHC 7.8.2.
>>>>>
>>>>>
>>>>> On Tue, May 20, 2014 at 10:42 PM, yang.zhao <[email protected]>wrote:
>>>>>
>>>>>> hi guys,
>>>>>> I'm newbie, just begin to learn Haskell.
>>>>>> now i write a very simple server and client .
>>>>>>
>>>>>> Server:
>>>>>> import Control.Concurrent
>>>>>> import System.IO
>>>>>> import Network
>>>>>>
>>>>>> port :: Int
>>>>>> port = 1234
>>>>>>
>>>>>> main :: IO ()
>>>>>> main = withSocketsDo $ do
>>>>>> s <- listenOn $ PortNumber $ fromIntegral port
>>>>>> (h, _, _) <- accept s
>>>>>>
>>>>>> sline <- hGetLine h
>>>>>> hPutStrLn h sline
>>>>>> putStrLn $ "send "++sline
>>>>>> threadDelay 1000000
>>>>>>
>>>>>> hClose h
>>>>>> sClose s
>>>>>>
>>>>>> Client :
>>>>>> import System.IO
>>>>>> import Network
>>>>>>
>>>>>> port :: Int
>>>>>> port = 1234
>>>>>>
>>>>>> main :: IO ()
>>>>>> main = withSocketsDo $ do
>>>>>> h <- connectTo "localhost" $ PortNumber $ fromIntegral port
>>>>>> hPutStrLn h "hello"
>>>>>> bs <- hGetContents h
>>>>>> putStrLn bs
>>>>>> hClose h
>>>>>>
>>>>>>
>>>>>> And, it doesn't work now . I run ./serv , then run ./cli , they will
>>>>>> block all the time.
>>>>>> but, when i run ./serv, and telnet localhost 1234 in another
>>>>>> terminal, it works fine.
>>>>>> so i don't know what's the wrong with my code.
>>>>>> anybody can tell me about my problem?
>>>>>>
>>>>>> os is Debian 7, haskell-platform 2012.2.0.0
>>>>>>
>>>>>> thanks a lot!!!
>>>>>> --
>>>>>> K.I.S.S.
>>>>>>
>>>>>> _______________________________________________
>>>>>> Beginners mailing list
>>>>>> [email protected]
>>>>>> http://www.haskell.org/mailman/listinfo/beginners
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Beginners mailing list
>>>>> [email protected]
>>>>> http://www.haskell.org/mailman/listinfo/beginners
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> K.I.S.S.
>>>>
>>>> _______________________________________________
>>>> Beginners mailing list
>>>> [email protected]
>>>> http://www.haskell.org/mailman/listinfo/beginners
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Beginners mailing list
>>> [email protected]
>>> http://www.haskell.org/mailman/listinfo/beginners
>>>
>>>
>>
>>
>> --
>> K.I.S.S.
>>
>
>
>
> --
> K.I.S.S.
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20140521/cdfb3161/attachment-0001.html>
------------------------------
Message: 2
Date: Wed, 21 May 2014 10:07:27 +0200
From: Sylvain Henry <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Haskell network sample
Message-ID:
<CAPmptcWPK_d=xecxhbdndc-bqhzcaimbkvftop-u6ms3xmf...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
hGetContents puts the handle in semi-closed state and reads until there is
nothing left to read. Hence you have a deadlock. Use hGetLine in "cli".
Sylvain
2014-05-21 9:15 GMT+02:00 yang.zhao <[email protected]>:
> omg, i test it on Windows, it's ok now. GHC is 7.6.3.
> i really don't konw why this happen..
>
> but there is another question on Windows
>
>
> main = withSocketsDo $ do
> s <- listenOn $ PortNumber $ fromIntegral port
> putStrLn "Listening..."
> (h, _, _) <- accept s
> putStrLn "After accept"
> sline <- hGetLine h
> putStrLn $ "get line from handle"++sline
> hPutStrLn h "xxxx...."
> putStrLn "send first done"
>
> --second recv
> slinea <- hGetLine h
> putStrLn $ "get line from handle"++slinea
>
> hPutStrLn h "yyyy....."
> putStrLn "send second done"
>
> threadDelay 1000000
> --
> cli:
>
> main = withSocketsDo $ do
> h <- connectTo "127.0.0.1" $ PortNumber $ fromIntegral port
> putStrLn "After connect"
> hPutStrLn h "xxx"
> putStrLn "put first to handle done"
>
> bs <- hGetContents h
> putStrLn "read from handle done "
> putStrLn bs
>
> --second send
> hPutStrLn h "yyy"
> putStrLn "put second to handle done"
> bfs <- hGetContents h
>
> putStrLn "read from handle done "
> putStrLn bs
>
>
> the second send and recv is blocking...
> server's output:
> Listening...
> After accept
> get line from handlexxx
> send first done
>
> client's output:
> After connect
> put first to handle done
> read from handle done
> xxx....
>
>
> ..... T_T
>
>
>
>
> 2014-05-21 14:10 GMT+08:00 yang.zhao <[email protected]>:
>
> Here's my new code:
>>
>> $ cat serv.hs
>>
>> import Control.Concurrent
>> import System.IO
>> import Network
>>
>> port :: Int
>> port = 1234
>>
>> main :: IO ()
>> main = withSocketsDo $ do
>> s <- listenOn $ PortNumber $ fromIntegral port
>> putStrLn "Listening..."
>>
>> (h, _, _) <- accept s
>> putStrLn "After accept"
>> sline <- hGetLine h
>> putStrLn "get line from handle"
>>
>> hPutStrLn h sline
>> putStrLn $ "send "++sline
>> threadDelay 1000000
>>
>> hClose h
>> sClose s
>>
>> --------
>> $ cat clie.hs
>>
>> import System.IO
>> import Network
>>
>> port :: Int
>> port = 1234
>>
>> main :: IO ()
>> main = withSocketsDo $ do
>> h <- connectTo "127.0.0.1" $ PortNumber $ fromIntegral port
>> putStrLn "After connect"
>> hPutStrLn h "hello"
>> putStrLn "put hello to handle done"
>> bs <- hGetContents h
>> putStrLn "read from handle done"
>> putStrLn bs
>> hClose h
>>
>>
>> ===
>> one terminal, run ./serv, then run ./clie in another terminal. Output is :
>>
>> $ ./serv
>> Listening...
>> After accept
>>
>> $ ./clie
>> After connect
>> put hello to handle done
>> read from handle done
>>
>>
>> it seems that client has read from then handle, but donesn't read
>> anything, then block.
>> and server donesn't receive anything, still wait for something...
>>
>> ghc version is 7.4.1, because of this?..
>>
>>
>> 2014-05-21 13:57 GMT+08:00 Bob Ippolito <[email protected]>:
>>
>> Not sure why you're having issues, I just tried it on GHC 7.6.3 on Fedora
>>> 20 and it worked fine there as well (both with runhaskell or compiled with
>>> -O).
>>>
>>> I might start adding putStrLn statements to the code to see where it's
>>> unexpectedly blocking, or perhaps use 127.0.0.1 instead of "localhost" in
>>> case the issue is a DNS misconfiguration.
>>>
>>>
>>>
>>> On Tue, May 20, 2014 at 10:51 PM, yang.zhao <[email protected]> wrote:
>>>
>>>> thanks for your replay.
>>>> i run the two program in two different teriminal for sure.
>>>>
>>>> it works for you?
>>>> but why can't run well on my computer.
>>>>
>>>> make me creazy....
>>>>
>>>>
>>>> 2014-05-21 13:47 GMT+08:00 Bob Ippolito <[email protected]>:
>>>>
>>>> How precisely are you trying to run the client? Are you typing it in to
>>>>> the same terminal? If so, then the client is never actually started,
>>>>> because when you type ./cli the input is going to ./serv and not the
>>>>> shell.
>>>>> Try running the client in a separate terminal.
>>>>>
>>>>> It works for me here on Mac OS X 10.9.2 with GHC 7.8.2.
>>>>>
>>>>>
>>>>> On Tue, May 20, 2014 at 10:42 PM, yang.zhao <[email protected]>wrote:
>>>>>
>>>>>> hi guys,
>>>>>> I'm newbie, just begin to learn Haskell.
>>>>>> now i write a very simple server and client .
>>>>>>
>>>>>> Server:
>>>>>> import Control.Concurrent
>>>>>> import System.IO
>>>>>> import Network
>>>>>>
>>>>>> port :: Int
>>>>>> port = 1234
>>>>>>
>>>>>> main :: IO ()
>>>>>> main = withSocketsDo $ do
>>>>>> s <- listenOn $ PortNumber $ fromIntegral port
>>>>>> (h, _, _) <- accept s
>>>>>>
>>>>>> sline <- hGetLine h
>>>>>> hPutStrLn h sline
>>>>>> putStrLn $ "send "++sline
>>>>>> threadDelay 1000000
>>>>>>
>>>>>> hClose h
>>>>>> sClose s
>>>>>>
>>>>>> Client :
>>>>>> import System.IO
>>>>>> import Network
>>>>>>
>>>>>> port :: Int
>>>>>> port = 1234
>>>>>>
>>>>>> main :: IO ()
>>>>>> main = withSocketsDo $ do
>>>>>> h <- connectTo "localhost" $ PortNumber $ fromIntegral port
>>>>>> hPutStrLn h "hello"
>>>>>> bs <- hGetContents h
>>>>>> putStrLn bs
>>>>>> hClose h
>>>>>>
>>>>>>
>>>>>> And, it doesn't work now . I run ./serv , then run ./cli , they will
>>>>>> block all the time.
>>>>>> but, when i run ./serv, and telnet localhost 1234 in another
>>>>>> terminal, it works fine.
>>>>>> so i don't know what's the wrong with my code.
>>>>>> anybody can tell me about my problem?
>>>>>>
>>>>>> os is Debian 7, haskell-platform 2012.2.0.0
>>>>>>
>>>>>> thanks a lot!!!
>>>>>> --
>>>>>> K.I.S.S.
>>>>>>
>>>>>> _______________________________________________
>>>>>> Beginners mailing list
>>>>>> [email protected]
>>>>>> http://www.haskell.org/mailman/listinfo/beginners
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Beginners mailing list
>>>>> [email protected]
>>>>> http://www.haskell.org/mailman/listinfo/beginners
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> K.I.S.S.
>>>>
>>>> _______________________________________________
>>>> Beginners mailing list
>>>> [email protected]
>>>> http://www.haskell.org/mailman/listinfo/beginners
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Beginners mailing list
>>> [email protected]
>>> http://www.haskell.org/mailman/listinfo/beginners
>>>
>>>
>>
>>
>> --
>> K.I.S.S.
>>
>
>
>
> --
> K.I.S.S.
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20140521/fe56f2c9/attachment.html>
------------------------------
Subject: Digest Footer
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
------------------------------
End of Beginners Digest, Vol 71, Issue 24
*****************************************