在Ruby中通过TCP发送消息或文件的代码

时间:2018-06-05 18:44:58

标签: ruby tcp tcpclient

我一直在尝试使用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>'

3 个答案:

答案 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