質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

1回答

796閲覧

RubyでSocket通信がうまくいかない

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2018/06/16 15:52

Rubyにて,Socket通信を行いたいため,はじめに以下の簡単なプログラムを作成しました.

server.rb

Ruby

1require 'socket' 2 3gate = TCPServer.open(50000) 4 5sock = gate.accept 6gate.close 7 8puts "get: #{sock.gets}" 9 10sock.write("Hello Client") 11 12sock.close

client.rb

Ruby

1require 'socket' 2 3sock = TCPSocket.open("localhost", 50000) 4 5sock.write("Hello Server") 6 7puts "get: #{sock.gets}" 8 9sock.close

しかし,動かしてみると,クライアント側で送信はできているのですが,
サーバーで受信ができておらず,次のステップに進みません.
さらに疑問なのが,処理を終わらすために,クライアント側でCtrl+Cで停止させると,

Traceback (most recent call last): 1: from client.rb:7:in `<main>' client.rb:7:in `gets': Interrupt

のようなエラー文が出るのですが,サーバー側では,クライアント側で送信した文字列が,
クライアントを停止したと同時に表示されるのです.
(クライアントが動いている間は,表示しません.)

また,クライアントの送信部分であるsock.writesock.putsに変えると送信することができます.
さらに,サーバー側ではsock.writeのままで送信ができてしまいます.

これらの原因について,わかる方,どうか回答お願いします.
他に知りたいことがあれば,コメントお願いします.

Rubyのバージョン: 2.5.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

sock.getsになってますが、getsは改行を待って改行までを読み込むメソッドですよ。
クライアントから改行が送られて始めて完了します。

投稿2018/06/16 16:00

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/16 16:07

確かにそうでした... 早速の回答ありがとうございました!
otn

2018/06/16 16:08

read_nonblockかrecvを使うのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問