我实现了一个简单的TCP服务器,它监听特定的地址和端口:
TCPServer.open(address,port) do |server|
file = File.open(file_name,"wb")
while client = server.accept
while buffer = client.gets()
puts buffer
file.write(buffer)
end
end
end
当我通过netcat发送短字符串或4096字节以下的字符串时,它会完全读取它们。当消息超过大小时,它会被截断,即使在连接之后,一旦到达eof。
我尝试实现一个TCPServer的替代方案:
one_hundred_kb = 1024 * 100
Socket.tcp_server_loop(address,port) do |connection|
begin
file = File.open(file_name,"wb")
# Read data in chunks of 1 hundred kb or less.
while data = connection.readpartial(one_hundred_kb) do
puts data
file.write(data)
end
rescue EOFError
connection.close unless connect.nil?
end
end
这个解决方案似乎也有与前一个相同的问题。我发现了一个similar thread,它可能会澄清这个问题,但我不能改变客户端发送消息到服务器的方式。
是否有方法更改最大读取大小以及数据被截断且无法恢复的原因?
编辑
正如@Stefan问我的那样,我通过发送一个大于4096字节的非常大的字符串(由一个非常长的1序列和两个尾随的xx组成)来强调我的问题。在服务器端,最终数据被截断,x没有显示。
1条答案
按热度按时间2o7dmzc51#
您只是有一个错误的印象,即文件被截断,因为您在它被关闭或刷新之前查看了它的内容。