gpt4 book ai didi

Ruby TCPSocket 读取直到自定义终止符

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:18 25 4
gpt4 key购买 nike

这是我监听客户端 TCP 套接字的代码:

def initialize
@msg = ''
@messages = Queue.new
@socket = TCPSocket.open('127.0.0.1', 2000)
Thread.new do
loop do
ch = @socket.recv(1)
if ch == "\n"
puts @msg unless @msg.blank?
@msg = ''
else
@msg += ch
end
end
end
end

我不喜欢逐字节的字符串连接。它应该不是内存高效的。

socket 的read 方法读取到换行符。套接字能否读取到某个自定义终止符,例如 0x00

如果不是,那么你知道哪种内存效率高的字符串appenging?

最佳答案

你可以使用 IO#gets使用自定义分隔符:

# tcp_test.rb
require 'socket'

TCPSocket.open('127.0.0.1', 2000) do |socket|
puts socket.gets("\0").chomp("\0") # chomp removes the separator
end

测试服务器使用Netcat :

$ echo -ne "foo\0bar" | nc -l 2000

输出:

$ ruby tcp_test.rb
foo

您甚至可以将输入记录分隔符设置为"\0":

$/ = "\0"
puts socket.gets.chomp

关于Ruby TCPSocket 读取直到自定义终止符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24030908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com