私はチュートリアルに従っています:http://www.tutorialspoint.com/ruby/ruby_socket_programming.htmそしてそれを使って「シンプルクライアント」をセットアップしています。
コードは次のとおりです。
require 'socket' # Sockets are in standard library
hostname = 'localhost'
port = 2000
s = TCPSocket.open(host, port)
while line = s.gets # Read lines from the socket
puts line.chop # And print with platform line terminator
end
s.close # Close the socket when done
単一の s.gets ステートメントを実行すると、サーバーから最初の応答行が返されます。もう一度 s.gets を実行すると、2 番目の応答行が表示されます。ただし、応答の最後に到達して s.gets を実行すると、プログラムはフリーズ状態になります。(これは、Rails コンソールから上記のプログラムをテストした場合です)。コードを実行すると同じことが起こります - while ステートメントが最後の s.gets を実行するときにフリーズが発生します。これを解決する方法についてのアイデアはありますか?
情報: サーバーは、次の C# コードを使用して応答メッセージを送信する C# サーバーです (応答の各行は同じコードを使用し、応答の最終行は他の行とまったく異なる方法で処理されません)。
socket.Send(Encoding.ASCII.GetBytes(msg + "\r\n"));
したがって、サーバーの「応答の終わり」を適切に解釈しない可能性があるため、クライアントがフリーズすると考えています。何か案は?