[Haskell-beginners] Haskell network sample

yang.zhao hckjsnzf at gmail.com
Wed May 21 06:10:30 UTC 2014


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 <bob at redivi.com>:

> 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 <hckjsnzf at gmail.com> 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 <bob at redivi.com>:
>>
>> 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 <hckjsnzf at gmail.com> 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
>>>> Beginners at haskell.org
>>>> http://www.haskell.org/mailman/listinfo/beginners
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Beginners mailing list
>>> Beginners at haskell.org
>>> http://www.haskell.org/mailman/listinfo/beginners
>>>
>>>
>>
>>
>> --
>> K.I.S.S.
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://www.haskell.org/mailman/listinfo/beginners
>>
>>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
>


-- 
K.I.S.S.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20140521/7498d4b4/attachment-0001.html>


More information about the Beginners mailing list