在 Haskell 中启动 TCP 服务器
Starting TCP server in Haskell
我正在尝试根据 haskell.org 上提供的示例在 Haskell 中创建一个 TCP 服务器。当我 运行 来自带有 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
您需要在编译后执行您的二进制文件:
./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.
我正在尝试根据 haskell.org 上提供的示例在 Haskell 中创建一个 TCP 服务器。当我 运行 来自带有 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
您需要在编译后执行您的二进制文件:
./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.