5

我目前正在关注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

返回错误:

bind: unsupported operation (Cannot assign rerquested address)

编辑:服务器代码如下:

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

和函数在另一个模块中定义echoServeronCtrlC

Right transport <- createTransport host port改成

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

这样我就可以看到错误消息是什么。

4

1 回答 1

0

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

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

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

于 2016-03-19T19:34:12.727 回答