require 'socket' # Provides TCPServer and TCPSocket classes
# Initialize a TCPServer object that will listen
# on localhost:2345 for incoming connections
server = TCPServer.new(2345)
loop do
# Wait until a client connects, then return a TCPSocket
# that can be used in a similar fashion to other Ruby
# I/O objects. (In fact, TCPSocket is a subclass of IO.)
socket = server.accept
socket.puts "What do you say?"
they_said = socket.gets.chomp
until they_said == "quit"
socket.puts "You said: #{they_said}!"
they_said = socket.gets.chomp
end
socket.puts "You said: #{they_said}. Goodbye!"
# Close the socket, terminating the connection
socket.close
end
在上面的代码中,我在ruby中创建了一个简单的服务器(我刚刚介绍过的主题)。作为练习的一部分,我有以下指示:
"从笔记本电脑连接到您配对的笔记本电脑。你需要笔记本电脑的网络IP地址和服务器就可以了#34;
我们使用的是telnet,但看起来我们无法在Mac上使用它,因为High Siera不允许这样做(至少没有进一步的配置)。
任何人都可以建议我们如何做到这一点,或者指出有助于提供材料的方向?
答案 0 :(得分:0)
如果你的操作系统不接受连接,那么在Ruby级别上你无能为力。您需要禁用防火墙或为此端口添加例外。
以下是您需要采取的三个步骤:
确保将TCPServer绑定到" public" IP 强>
更新:正如@ siegy22在评论中指出:你也可以使用" 0.0.0.0"。
您可以在网络偏好设置或ipconfig
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether ca:fe:ca:fe:ca:fe
inet y.y.y.y netmask 0xffffff00 broadcast x.x.x.x
media: autoselect
status: active
此处y.y.y.y
是您感兴趣的IP。如下所示创建TCTServer:
TCPServer.new("y.y.y.y", 2345)
停止Mac的防火墙(或允许与该端口的特定连接)
您可以在首选项/ Securiry部分中执行此操作。
在测试后重新启用它
从另一台计算机连接到服务器
telnet y.y.y.y 2345
以上步骤假设两台计算机在同一网络中,没有通过互联网连接。如果你在不同的网络上(例如连接到互联网的僵尸网络),我会想到两种解决方案
我建议你先尝试ngrok(或类似的东西)。