2009-08-12 8 views
0

状況は、クライアントからのファイル転送を受け付けるサーバースクリプトを作成しようとしていることです。私は、TCPプロトコルを使ってサーバーとの間で通信を行い、接続する方法を理解しました。しかし、私はどのようにバイナリファイルをルビで転送するのだろうかと思いましたか?バイナリファイルまたは任意のファイルをリモートサーバに転送するにはどうすればよいですか? - Ruby

あなたはバイナリファイルを開くことができますが、それを転送するためにはどのような手順が必要ですか? TCPストリームの考えですか? UDPはどうですか?

答えて

3

解決策が見つかりました。 SFTPを使用して

、私は、サーバーへのSSH接続を介してファイルをアップロードすることができます

require 'net/sftp' 

Net::SFTP.start('host', 'username', :password => 'password') do |sftp| 
    # upload a file or directory to the remote host 
    sftp.upload!("/path/to/local", "/path/to/remote") 

    # download a file or directory from the remote host 
    sftp.download!("/path/to/remote", "/path/to/local") 
end 

しかしこれは、私は上記のSSHを使用してに依存していると探していたものは本当にないです。私はそれが独立していることを望んでいた。

+0

+1あなた自身を再デバッグする必要のない安全なプロトコルを使用する場合は+1してください。もちろん、低レベルのソケットで作業する方法を習得しようとしている場合を除き、これは練習問題です。 –

1

ソケットと同じように、バイナリデータと非バイナリデータを区別することは全くありません。それらはデータのストリームに過ぎず、通信を正しくフォーマットして解釈することはどちらの側でもアプリケーションの責任です。

データに何らかのフレーミングがないと、送信されたデータが完全で有効であるかどうかを判断することが難しくなります。これがどのように行われるかの例はHTTP仕様ですが、他にも多くのものがありますが、その中にはFTPのような単純なものもあります。

理想的には、独自の仕様に頼ることなく既存の仕様を使用でき、有用で堅牢な汎用的な例として役立つBEEPなどの仕様があります。

1

まあ、ソケットはちょうどIOオブジェクトであるので、あなたがあなた自身のクライアントと独自のサーバー

socket.write(data) 

までそれprety多くの金額を書いた場合。そしてあなたの入力を終了します(もちろん、独自のエスケープを作成するか、あらかじめ長さを送る必要があります - 最初からプロトコルを作ります)。

+0

私は確かにこれをやっている人がいます。私が従うことができる簡単なプロトコルはありませんか? – chutsu

+0

もちろん可能です!単純なHTTPまたはFTPを使用してください。 – Julik

関連する問題