I created a simple server with one service that works fine with small test files, but when I tried to run larger and more practical files, everything went wrong.
Sending a file with 5.2 MB works fine. Sending a file with 30.3 MB works, but takes a lot of time (about 15 minutes or so). When sending a 38.5 MB file, the server receives it, but then it gives an error: msconvert_server.rb:20:in 'write': Invalid argument - 179.raw (Errno::EINVAL)(179.raw is the name of the file).
I do not understand why this is happening. This forum seemed to have an answer, and although it accelerated the time of sending and receiving, and also received line 20, it did not work out another point. I donβt think TCP has a file size limit, which makes me think that the problem lies in the Ruby code. Has anyone seen this problem or had an idea of ββwhat could be happening here?
Here is the code.
Server
require 'socket'
server = TCPServer.open(2000)
loop {
client = server.accept
filename = client.gets.chomp
puts "Reading contents of #{filename}.raw"
raw_data = client.gets("\r\r\n\n").chomp("\r\r\n\n")
(Line 20, where error occurs) File.open(filename + ".raw", 'wb') {|out| out.print raw_data}
puts "Converting #{filename}"
system "scriptit.bat " + filename + ".raw"
puts "Sending contents of #{filename}.mzML"
client.print IO.read(filename + ".mzML")
client.print "\r\r\n\n"
puts "Done"
client.close
}
Client
host = config_value("//Host/@ip")
port = 2000
client = TCPSocket.open(host, port)
fileName = @file.split("/")[-1].chomp(File.extname(@file))
puts "Sending raw file"
client.puts fileName
client.print(File.open("#{@file}", "rb") {|io| io.read})
client.print("\r\r\n\n")
puts "Receiving mzML file"
File.open("#{$path}../data/spectra/#{fileName}.mzML", 'wb') {|io| io.print client.gets("\r\r\n\n")}
client.close
source
share