Rebol 2 端口绑定(bind)到多个 IP

标签 rebol rebol3 rebol2

我有一个具有多个 IP 的 Windows 设置,并希望我的 Rebol 脚本(在 Rebol/Core 2.78 上)能够单独绑定(bind)并监听每个 IP 上的相同端口号。

直到最近,我认为这样做的语法是:

Port1Test: open/lines tcp://:80   browse http://10.100.44.6?
Port2Test: open/lines tcp://:80   browse http://10.100.44.7?

但事实证明 Port2Test行失败,因为 browse http://10.100.44.6?部分被完全忽略(现在搜索,我什至无法找到我首先获得该语法的位置)。
阅读文档,我可以找到关于如何指定监听端口的所有内容,如下所示:
Port1Test: open/lines tcp://:80

探索 Port1Test端口显示大多数设置为 none ,还有一些设置如下:
scheme: 'tcp
host: none
port-id: 80
local-ip: 0.0.0.0
local-port: 80

所以我试图像这样修改这些值:
Port1Test: open/lines tcp://:80  ; Create port, as before. Then modify below
Port1Test/host: 10.100.44.6      ; Might this be the binding interface?
Port1Test/port-id: 1             ; I guess this is just an id?
Port1Test/local-ip: 10.100.44.6  ; This ought to be the binding interface.

Port2Test: open/lines tcp://:80  ; Create port, as before. Then modify below
Port2Test/host: 10.100.44.7      ; Might this be the binding interface?
Port2Test/port-id: 2             ; I guess this is just an id?
Port2Test/local-ip: 10.100.44.7  ; This ought to be the binding interface.

不幸的是,上述修改的所有变体,包括将 IP 值交换为 Port1TestPort2Test , 创建时失败 Port2Test . :-(

我确定我忽略了一些东西,但是我在任何地方都找不到关于如何在将端口绑定(bind)到特定接口(interface)时初始化端口的任何提示。

任何提示高度赞赏!

编辑:
Rebol 绑定(bind)到接口(interface)的方式现在对我来说非常明显 - 但如何修改它仍然是一个谜。

假设我有两个 IP(== 接口(interface))与一张网卡相关联:10.100.1.1 和 10.100.1.2。
在 10.100.1.1:80 上,我设置了一个我知道可以绑定(bind)到该特定接口(interface)的 Tomcat 应用程序。
然后我启动了一个 REBOL 应用程序,它也要求端口 80。
它们都将愉快地运行,并且每个都只能在一个 IP 上访问,就好像 Rebol 应用程序已绑定(bind)到 10.100.1.2。
然后我关闭了 Tomcat 应用程序,并尝试启动它。事实证明这是不可能的,因为接口(interface)正在使用中。
如果我访问这两个 IP,结果证明 Rebol 应用程序可以在两个 IP 上访问。

它不是 Rebol 中的一个事件机制,但因为 Rebol 声明了 0.0.0.0 接口(interface)(在服务器的上下文中,0.0.0.0 表示“本地计算机上的所有 IPv4 地址”),它被转换为任何当前可用的接口(interface),以及在接口(interface)可用时对接口(interface)的延迟声明。

了解如何在创建端口时将 Rebols 的默认接口(interface) 0.0.0.0 更改为其他内容真是太好了!

最佳答案

Rebol2 监听端口默认绑定(bind)到所有可用的 IPv4 接口(interface)(0.0.0.0),不幸的是,据我所知,没有办法改变它。

仅供引用,Rebol2 使用 interfaces 公开现有的 IPv4 接口(interface)端口模式:

>> p: open tcp://:8000
>> probe get-modes p 'interfaces
[make object! [
        name: "if19"
        addr: 10.27.10.110
        netmask: 255.255.255.252
        broadcast: 10.27.10.111
        dest-addr: none
        flags: [broadcast multicast]
    ] make object! [
        name: "lo0"
        addr: 127.0.0.1
        netmask: 255.0.0.0
        broadcast: none
        dest-addr: none
        flags: [multicast loopback]
    ] make object! [
        name: "if16"
        addr: 192.168.1.4
        netmask: 255.255.255.0
        broadcast: 192.168.1.255
        dest-addr: none
        flags: [broadcast multicast]
    ]]

唉,这是只读的......(文档说不可设置)。

您可以找到所有端口模式的列表here ,以防对您有任何帮助。

关于Rebol 2 端口绑定(bind)到多个 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34779063/

相关文章:

rebol - 调试并避免周期性 REBOL2 错误,try[] 没有(?)捕获?

reflection - Rebol为什么不换新线?类似地对待换行关键字和换行符吗?

rebol - 查看错误 Rebol 3

iis - 如何在 IIS 7 上配置 CGI?

rebol - R3GUI - 如何设置 'area' 的大小

windows - 查看布局 rebol 3 不工作

Rebol 2 在升级到 Ubuntu 15.10 后停止工作

rebol - 如何同时打开和关闭不同的窗口?

asynchronous - 同步读/写端口时避免递归?

email - 如何使用 Rebol 的 SEND 功能将地址添加到 BCC 字段?