在 Ruby 中通过 TCP 发送消息或文件的代码
Code for sending a message or file over TCP in Ruby
几天来我一直在尝试使用 TCP 让两个 ruby 程序在相同或不同的机器上进行通信,但收效甚微。
我正在寻找示例 'client' 和 'server' 脚本,一旦我选择了可用的端口,它们将立即运行。
我发现的客户端代码似乎可以工作,如下所示。
但是我没有服务器可以使用它。
# Seems to work for some reason
require 'socket'
tcp_client=TCPSocket.new('localhost',1540)
while grab_string=tcp_client.gets
puts(grab_string)
end
tcp_client.close
我对可以在我的机器上运行的最简单的解决方案感兴趣。
它所要做的就是发送一个字符串。我正在寻找的答案就像 this 但带有 ruby,而不是 python.
随意更改客户端和服务器的代码,只有一半的拼图我不确定它是否有效。
服务器代码
# Server
require 'socket'
sock = TCPSocket.new('localhost', 1540)
sock.write 'GETHELLO'
puts sock.read(5) # Since the response message has 5 bytes.
sock.close
使用 kennycoc 建议的代码,我收到以下错误消息
Server.rb:3:in `initialize': Only one usage of each socket address (protocol/network address/port) is normally permitted. - bind(2) for nil port 1540 (Errno::EADDRINUSE)
from Server.rb:3:in `new'
from Server.rb:3:in `<main>'
从 https://ruby-doc.org/stdlib-2.5.1/libdoc/socket/rdoc/Socket.html 获取文档,您似乎在寻找这样的东西:
require 'socket'
server = TCPServer.new(1540)
client = server.accept
client.puts "GETHELLO"
client.close
server.close
更一般地说,如果您希望服务器可供多个客户端访问以从中请求数据,您将有一个循环 运行 如
loop do
client = server.accept
client.puts "gethello"
client.close
end
@adjam 你还没有创建 TcpServer,
TCPSocket用于创建TCP/IP客户端套接字
要创建 TCP/IP 服务器,您必须使用 TCPServer
例如:
Tcp/ip 服务器代码:
require 'socket'
server = TCPServer.open(2000)
client = server.accept # Accept client
while (response = client.gets) # read data send by client
print response
end
Tcp/ip 客户端代码:
require 'socket'
client = TCPSocket.open('localhost', 2000)
client.puts "hello"
client.close;
tcp_server.rb
require "socket"
server = TCPServer.new(1234)
loop do # Keep the server alive
session = server.accept
puts "Request arrived"
session.write "Time is #{Time.now}" # Send data to client
session.close
end
tcp_client.rb
require "socket"
socket = TCPSocket.open("localhost", 1234)
puts socket.gets # Print sever response
socket.close
现在 - 如果您想要 two-way 服务器和客户端之间的通信,请使用以下
tcp_client.rb
require "socket"
socket = TCPSocket.open("localhost", 1234)
socket.puts "Sample data to server" # Send data to server
puts socket.gets # Print sever response
socket.close
tcp_server.rb
require "socket"
server = TCPServer.new 1234
loop do
session = server.accept
puts "Data recieved - #{session.gets}" # Read data from client
session.write "Time is #{Time.now}" # Send data to clent
session.close
end
几天来我一直在尝试使用 TCP 让两个 ruby 程序在相同或不同的机器上进行通信,但收效甚微。
我正在寻找示例 'client' 和 'server' 脚本,一旦我选择了可用的端口,它们将立即运行。
我发现的客户端代码似乎可以工作,如下所示。
但是我没有服务器可以使用它。
# Seems to work for some reason
require 'socket'
tcp_client=TCPSocket.new('localhost',1540)
while grab_string=tcp_client.gets
puts(grab_string)
end
tcp_client.close
我对可以在我的机器上运行的最简单的解决方案感兴趣。
它所要做的就是发送一个字符串。我正在寻找的答案就像 this 但带有 ruby,而不是 python.
随意更改客户端和服务器的代码,只有一半的拼图我不确定它是否有效。
服务器代码
# Server
require 'socket'
sock = TCPSocket.new('localhost', 1540)
sock.write 'GETHELLO'
puts sock.read(5) # Since the response message has 5 bytes.
sock.close
使用 kennycoc 建议的代码,我收到以下错误消息
Server.rb:3:in `initialize': Only one usage of each socket address (protocol/network address/port) is normally permitted. - bind(2) for nil port 1540 (Errno::EADDRINUSE)
from Server.rb:3:in `new'
from Server.rb:3:in `<main>'
从 https://ruby-doc.org/stdlib-2.5.1/libdoc/socket/rdoc/Socket.html 获取文档,您似乎在寻找这样的东西:
require 'socket'
server = TCPServer.new(1540)
client = server.accept
client.puts "GETHELLO"
client.close
server.close
更一般地说,如果您希望服务器可供多个客户端访问以从中请求数据,您将有一个循环 运行 如
loop do
client = server.accept
client.puts "gethello"
client.close
end
@adjam 你还没有创建 TcpServer, TCPSocket用于创建TCP/IP客户端套接字
要创建 TCP/IP 服务器,您必须使用 TCPServer
例如: Tcp/ip 服务器代码:
require 'socket'
server = TCPServer.open(2000)
client = server.accept # Accept client
while (response = client.gets) # read data send by client
print response
end
Tcp/ip 客户端代码:
require 'socket'
client = TCPSocket.open('localhost', 2000)
client.puts "hello"
client.close;
tcp_server.rb
require "socket"
server = TCPServer.new(1234)
loop do # Keep the server alive
session = server.accept
puts "Request arrived"
session.write "Time is #{Time.now}" # Send data to client
session.close
end
tcp_client.rb
require "socket"
socket = TCPSocket.open("localhost", 1234)
puts socket.gets # Print sever response
socket.close
现在 - 如果您想要 two-way 服务器和客户端之间的通信,请使用以下
tcp_client.rb
require "socket"
socket = TCPSocket.open("localhost", 1234)
socket.puts "Sample data to server" # Send data to server
puts socket.gets # Print sever response
socket.close
tcp_server.rb
require "socket"
server = TCPServer.new 1234
loop do
session = server.accept
puts "Data recieved - #{session.gets}" # Read data from client
session.write "Time is #{Time.now}" # Send data to clent
session.close
end