Hi all,

Thanks for all your help.

I finally realised that hGetLine strips out the "\n" newline character
so when I forward the line to the server, I need to append it again.

Here's my implementation.

-John

main = proxyServe

proxyServe = withSocketsDo $ do
  socket <- listenOn $ PortNumber 8082
  acceptConnection socket

acceptConnection socket = do
  (handleToClient, hostName, portNumber) <- accept socket
  handleToServer <- connectTo "127.0.0.1" (PortNumber 8080)
  hSetBuffering handleToClient LineBuffering
  hSetBuffering handleToServer LineBuffering
  putStrLn $ "Socket accepted from " ++ hostName
  forkIO (clientToServer handleToClient handleToServer)
  forkIO (serverToClient handleToClient handleToServer)
  acceptConnection socket

clientToServer handleToClient handleToServer = do
  putStrLn "Streaming from client to server"
  eof <- hIsEOF handleToClient
  if not eof
    then do
      text <- hGetLine handleToClient
      hPutStr handleToServer $ text ++ "\n"
      hFlush handleToServer
      putStr ("C: " ++ text ++ "\n")
      clientToServer handleToClient handleToServer
    else do
      putStrLn "EOF from Client"
      return ()

serverToClient handleToClient handleToServer = do
  putStrLn "Streaming from server to client"
  eof <- hIsEOF handleToClient
  if not eof
    then do
      text <- hGetContents handleToServer
      hPutStr handleToClient text
      putStrLn $ "S: " ++ text
      serverToClient handleToClient handleToServer
    else do
      putStrLn "EOF from Server"
      return()
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to