我有一个带有多个IP的Windows设置,并希望我的Rebol脚本(在Rebol/Core 2.78上)在每个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值交换为Port1Test
和Port2Test
,在创建Port2Test
时都会失败-(
我确信我忽略了一些东西,但我在任何地方都找不到任何关于如何在将端口绑定到特定接口时初始化端口的提示。
非常感谢任何提示!
编辑:Rebol绑定到接口的方式现在对我来说很明显,但如何修改它仍然是个谜。
假设我有两个IP(==接口)关联到一个网卡:10.100.1.1和10.100.1.2。在10.100.1.1:80上,我设置了一个Tomcat应用程序,我知道它可以绑定到那个特定的接口。然后我启动一个REBOL应用程序,它也声明端口80。它们都将愉快地运行,并且每个都只能在一个IP上访问,就好像Rebol应用程序绑定到10.100.1.2一样。然后我关闭了Tomcat应用程序,并尝试启动它。结果证明这是不可能的,因为接口正在使用中。如果我同时访问这两个IP,那么Rebol应用程序在两个IP上都可以访问。
Rebol中的主动机制在这里并不起作用,但因为Rebol声明0.0.0.0接口(在服务器的上下文中,0.0.0.0意味着"本地机器上的所有IPv4地址"),它被转换为任何当前可用的接口,并在接口可用时延迟声明。
如果能在端口创建时发现如何将Rebolls默认接口0.0.0.0更改为其他接口,那将是一件非常好的事情!
Rebol2侦听端口默认绑定到所有可用的IPv4接口(0.0.0.0),不幸的是,据我所知,没有办法改变这一点。
仅供参考,Rebol2使用interfaces
端口模式公开了现有的IPv4接口:
>> 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]
]]
唉,这是只读的。。。(文档显示不可设置)。
你可以在这里找到所有端口模式的列表,以防对你有任何帮助。