如何使用createTransport?

HHC*_*HHC 5 haskell

我目前正在关注Cloud-Haskell教程并坚持下去createTransport.在我看来,我只能在127.0.0.1打开服务器的传输,无法打开客户端连接到服务器的传输.我尝试使用两台机器,curl ifconfig.me用来获取我的IP地址,然而,createTransport不会为我创建一个传输.有任何想法吗?

编辑:当地正在运作.

我的程序与教程完全相同,尝试连接两台机器:

curl ifconfig.me 回报 101.119.27.24

服务器的命令行:

ServerClientServer 101.119.27.24 9000
Run Code Online (Sandbox Code Playgroud)

错误返回:

bind: unsupported operation (Cannot assign rerquested address)
Run Code Online (Sandbox Code Playgroud)

编辑:服务器代码如下:

main :: IO ()
main = do
  [host, port]    <- getArgs
  serverDone      <- newEmptyMVar
  Right transport <- createTransport host port 
  Right endpoint  <- newEndPoint transport
  forkIO $ echoServer endpoint serverDone 
  putStrLn $ "Echo server started at " ++ show (address endpoint)
  readMVar serverDone `onCtrlC` closeTransport transport
Run Code Online (Sandbox Code Playgroud)

echoServeronCtrlC功能在另一个模块中定义.

我改变了Right transport <- createTransport host port

t <- createTransport host port defaultTCPParameters
let transport = case t of
  (Right t) -> t
  (Left e)  -> error $ show e
Run Code Online (Sandbox Code Playgroud)

这样我就可以看到错误信息是什么.

scl*_*clv 0

基于评论的社区维基答案:

您位于 NAT 设备(例如宽带路由器)后面,并且相关地址属于该设备,而不属于您的计算机。您无法绑定到它。

尝试该ifconfig命令(ipconfig在 Windows 上)。您将获得本地网络上的一个地址,或多个网络(例如有线和无线)上的多个地址。如果您有一个连接到宽带路由器的典型家庭网络,这些地址将从您的家庭网络中可见,但从互联网上看不到。为了使您的服务器能够从外部访问,您需要在路由器中配置一个“洞”。这些都是基本的网络知识,如果你想做任何“多云”的事情,你就必须学习它。