我一直在尝试使用TCP在相同或不同机器上进行两个ruby程序通信的成功有限。
我正在寻找可以立即使用的“客户端”和“服务器”脚本,一旦我选择了可用的端口。
我发现客户端代码似乎有效,如下所示。
但我没有服务器使用它。
# 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>'
答案 0 :(得分:2)
从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
答案 1 :(得分:2)
@adjam你还没有创建一个TcpServer, TCPSocket用于创建TCP / IP客户端套接字
要创建TCP / IP服务器,您必须使用TCPServer
EX: 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;
答案 2 :(得分:0)
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
现在-如果要在服务器和客户端之间进行双向通信,请使用以下
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