【发布时间】:2016-02-29 05:36:52
【问题描述】:
服务器.rb
require 'socket'
Socket.tcp_server_loop(6666) do |connection|
while data = connection.read(1024 * 16) do
if data == 'hello'
connection.write('hi hi hi hi hi')
end
end
connection.close
end
client.rb 需要“插座” 需要'io/控制台'
client = TCPSocket.new('localhost', 6666)
client.write('hello')
client.flush
# client.close_write
# client.close_write
# client.fdatasync
# client.fsync
data = client.read
puts data
# client.open
# client.write('hello')
# puts client.read
我想重复使用 socke,所以我不想关闭它。
但如果我不发送 client.close_write ,它就不起作用,无法读取服务器数据。 如果 client.close_write 套接字关闭,则不会再向服务器写入数据。
我想知道如何告诉 EOF 并且不要关闭套接字? `fdatasync' 中的 client.fdatasync =>:不支持操作 (Errno::ENOTSUP)
client.fsync => 在 `fsync' 中:不支持操作 (Errno::ENOTSUP)
我认为 fdatasync 和 fsync 可能是告诉 EOF 的方法,但它们不起作用。
c 语言有一种方法可以做到这一点: ssize_t 发送(int sockfd,const void *buff,size_t nbytes,int 标志) nbytes 告诉服务器数据大小。 ruby 中没有这样的方法。
【问题讨论】:
标签: ruby-on-rails ruby sockets