Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ruby发送套接字消息而不关闭连接_Ruby_Sockets - Fatal编程技术网

使用ruby发送套接字消息而不关闭连接

使用ruby发送套接字消息而不关闭连接,ruby,sockets,Ruby,Sockets,我正在开发一个小型ruby客户机,它向socket服务器发送连续的信息流(然后传递给其他正在侦听的客户机)。我不希望每次发送数据时都必须关闭连接,但是在ruby中,在我关闭连接之前,数据似乎不会被发送。是否有其他方法可以在不重新连接到服务器的情况下执行此操作?客户机脚本发送传出数据后,必须立即传递传出数据 目前,我必须在一个循环中执行此操作: s = TCPsocket.new('127.0.0.1',2000) s.send('Hello World',0) s.close 然而,这意味着我

我正在开发一个小型ruby客户机,它向socket服务器发送连续的信息流(然后传递给其他正在侦听的客户机)。我不希望每次发送数据时都必须关闭连接,但是在ruby中,在我关闭连接之前,数据似乎不会被发送。是否有其他方法可以在不重新连接到服务器的情况下执行此操作?客户机脚本发送传出数据后,必须立即传递传出数据

目前,我必须在一个循环中执行此操作:

s = TCPsocket.new('127.0.0.1',2000)
s.send('Hello World',0)
s.close
然而,这意味着我必须不断地重新连接到套接字服务器,通常是很快地连续连接。我希望能够连接到循环外部的套接字服务器,并在循环完成时关闭。如果我现在这样做,发送数据将在“关闭”启动时立即全部发送

是否可以在继续发送信息的同时保持连接打开?我知道这在其他语言和脚本中是可能的,因为我在AS3中已经多次这样做了


提前谢谢。

刷新是否有效

s = TCPSocket.new('127.0.0.1', 2000)
1.upto(10) do |n|
  s.send("Hello #{n}\n", 0)
  s.flush
end
s.close
为了回答我自己的问题(希望能得到其他人的帮助),在ruby
socket.send('some message\000',0)
中的消息后添加
\000
,可以正常工作。为了澄清,您可以键入以下内容

socket = TCPsocket.new('127.0.0.1',2000)
socket.send('some message\000', 0)
上面将发送一条消息,但不首先关闭套接字连接(
socket.close
)。还可以参考ruby socket服务器,我正在使用它向Flash广播

require 'socket'
portnumber = 2000
socketServer = TCPServer.open(portnumber)

while true
  Thread.new(socketServer.accept) do |connection|
    puts "Accepting connection from: #{connection.peeraddr[2]}"

    begin
      while connection
        incomingData = connection.gets("\0")
        if incomingData != nil
          incomingData = incomingData.chomp
        end

        puts "Incoming: #{incomingData}"

        if incomingData == "DISCONNECT\0"
          puts "Received: DISCONNECT, closed connection"
          connection.close
          break
        else
          connection.puts "#{incomingData}"
          connection.flush
        end
      end
    rescue Exception => e
      # Displays Error Message
      puts "#{ e } (#{ e.class })"
    ensure
      connection.close
      puts "ensure: Closing"
    end
  end
end
我应该在适当的时候给予表扬,套接字服务器代码基于以下博文:

使用
close\u write()
禁止使用关机系统调用进行进一步写入。更


不幸的是,这没有起作用。我将尝试在服务器代码中查看是否有我可以做的事情,但是服务器代码处理来自Flash AS3的连接和数据传输时没有任何问题(这让我相信故障不在套接字服务器中)。
Socket.tcp("www.ruby-lang.org", 80) {|sock|
  sock.print "GET / HTTP/1.0\r\nHost: www.ruby-lang.org\r\n\r\n"
  sock.close_write
  puts sock.read
}