Запуск TCP-сервера в Haskell - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь создать сервер TCP в Haskell из примера, предоставленного haskell.org . Когда я запускаю код из терминала с ghc run Main.hs, я получаю:

[1 of 1] Compiling Main             ( Main.hs, Main.o )
Linking Main.exe ...

После чего он закрывается.

Код

module Main where 
    import Network.Socket
    import Network.Socket.ByteString
    import qualified Data.ByteString.Char8 as C

    main::IO()
    main=do
        sock<-socket AF_INET Stream 0
        bind sock (SockAddrInet 8100 iNADDR_ANY)
        listen sock 2
        mainloop sock


    mainloop::Socket->IO()
    mainloop sock=do
        conn<-accept sock
        runConn conn
        mainloop sock


    runConn::(Socket,SockAddr)->IO()
    runConn (sock,_)=do
        Network.Socket.ByteString.send sock (C.pack "hello")
        close sock

Сначала я предположил, что сервер может каким-то образом работать в фоновом режиме, поэтому я протестировал его с расширением браузера Simple Web Socket Client и nada.

Проверенный URL
ws://localhost:8100

1 Ответ

3 голосов
/ 09 апреля 2019

Вам необходимо выполнить свои двоичные файлы после их компиляции: ./Main в Linux или Main.exe в Windows.

Затем вы можете запросить ваш сервер благодаря telnet localhost 8100

telnet localhost 8100 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. helloConnection closed by foreign host.

...