【问题标题】:ruby cannot assign requested addressruby 无法分配请求的地址
【发布时间】:2013-05-31 00:22:16
【问题描述】:

我已经创建了一个 qt 程序,它在我的服务器上的特定端口上进行侦听。它工作正常。现在我想创建一个简单的 ruby​​ 程序来做同样的事情。现在我只有一个使用 netcat 的简单测试服务器,它建立一个网络套接字并接受 UDP 数据(顺便说一下,这是 Ubuntu 服务器):

$ sudo nc -l 1720

现在我只是想在 Ruby 中监听端口:

# network.rb

require 'socket'

socket = UDPSocket.new
socket.bind('64.xxx.xx.xxx', 1720)

这马上引发了这个异常:

network.rb:4:in `bind': Cannot assign requested address - bind(2) (Errno::EADDRNOTAVAIL)

为什么说地址不可用?就是有一个 netcat 套接字。目标是让 UDP 数据从 GPRS 设备传入该端口,然后让 ruby​​ 坐在我的 ubuntu 服务器上侦听该数据,然后对其进行解码,并将其存储到 postgresql 数据库中。

【问题讨论】:

    标签: ruby sockets


    【解决方案1】:

    你是在做服务器还是客户端?

    你用的是nc,所以我猜你是在做客户端。

    服务器已绑定

    客户端正在连接:

    c = UDPSocket.new

    c.connect("127.0.0.1", 1111)

    “地址不可用”通常作为端口使用。

    或者你可以先ping地址,看看是否可以到达

    【讨论】:

    • 嗯,说得好,这里的服务器和客户端有什么区别?
    • 服务器监听端口,接收请求,发送响应。
    • 客户端向端口发送请求,然后等待响应。
    • 你已经用nc监听了1720端口,所以服务器正在运行,1720端口被占用,所以你不能让另一个服务器使用相同的端口
    • 我实际上终止了 netcat 程序,我检查了现在是否有任何东西在端口 1720 上侦听,但没有。我已经修复了防火墙以启用该端口(因为我已经使用 qt 程序对此进行了测试)。但是,我仍然遇到同样的错误。我希望我的 ruby​​ 程序成为服务器,而不是 netcat。
    【解决方案2】:

    我运行时遇到了同样的错误:

    rails s -b 10.0.0.61
    

    原来我的本地 IP 不是 10.0.0.61,这是导致错误的原因。

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 2012-08-12
      相关资源
      最近更新 更多