network-2.6.3.4: examples/EchoClient.hs
{-# LANGUAGE OverloadedStrings #-}
-- Echo client program
module Main (main) where
import qualified Control.Exception as E
import qualified Data.ByteString.Char8 as C
import Network.Socket hiding (recv)
import Network.Socket.ByteString (recv, sendAll)
main :: IO ()
main = withSocketsDo $ do
addr <- resolve "127.0.0.1" "3000"
E.bracket (open addr) close talk
where
resolve host port = do
let hints = defaultHints { addrSocketType = Stream }
addr:_ <- getAddrInfo (Just hints) (Just host) (Just port)
return addr
open addr = do
sock <- socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr)
connect sock $ addrAddress addr
return sock
talk sock = do
sendAll sock "Hello, world!"
msg <- recv sock 1024
putStr "Received: "
C.putStrLn msg