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

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

ただいまの
回答率

90.52%

  • Ruby

    7664questions

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

ruby -socketの使用状況に応じて、つなぐソケットを変更したい

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 359

FumiakiNakao

score 138

rubyでTCPsocketを用いて、以下のようなことを実現したいです

10500番ポートで、サーバーに接続する。ただし、ポートが他のプログラムによって使用中だった場合、10501番ポートで同サーバーに接続する

そして、自分で考えて書いてみたプログラムが以下です

    socket = nil
    until socket
      begin
        socket = TCPSocket.open(@host, @port)
      rescue
        puts "Julius に接続失敗しました\n再接続を試みます"
        socket=nil
        @port=@port+1
        sleep 10
        retry
      end
    end

    puts "Julius にポート番号#{@port}番で接続しました"

ですが、これだと、接続自体はできてしまうのか、2つ同じプログラムを実行した際、両方のプログラムで

"Julius にポート番号10500番で接続しました"
というメッセージが出てしまいます

ポートを分けるうまい方法はないでしょうか?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

TCPSocket.openに2つだけ引数を指定すると、それはリモート側のアドレス・ポートの指定となります。リモート側のポートしか指定しない場合、ローカル側のポートは空いているものを適当に使います

どうしてもローカル側のポート番号を指定したい場合、第4引数での指定が必要となります(るりま)。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    引数の渡し方が間違っているのでしょうか?

    rubyでじゃんけんプログラムを作っているのですが、勝率・敗率等を出そうとしてもうまく動きません。 条件として、 ・Rubyファイル、入力ファイル、出力ファイルの3つを用意

  • 解決済

    Raspberry Piの音声制御 Julius Pythonコード

    以下のコードはPythonで、音声認識のJuliusをモジュールモードで起動し、辞書ファイルから送られてきた、XMLをパース処理し、その結果を commandに代入し、ターミナル画

  • 解決済

    クイックソート

    前提・実現したいこと ここに質問したいことを詳細に書いてください 『アルゴリズムを、はじめよう」という書籍を参考に、Rubyでクイックソートのプログラムを書いています。この書籍

  • 解決済

    TCPServer側で接続されたことを知りたい

    サーバに接続したら問題が出されるようなサーバプログラムを書いてみようと思ったのですが、うまく行きません。 サーバ側でCtrl+Cをした時に問題が送られてきます。 クライアン

  • 解決済

    NoMethodErrorの内容がよく理解できません

    前提・実現したいこと RPG用のキャラクター作成プログラムを作成しようとしています。 基本能力にボーナスポイントを割り振る機能である「assignment」メソッドを実装中に以

  • 解決済

    Rubyから実行ファイルを実行して、対話的に処理を行いたい。

    タイトルのとおりです。 実行ファイルを、端末からではなくRubyで実行して、入出力を対話的に行いたいです。 ただ、下のプログラムを動かすと、なにも出力せずとまります。 メッセ

  • 受付中

    コマンドプロンプトで計算ゲームをしたいが、正解率の所でエラーになる件

    ご覧いただきありがとうございます。 現在、コマンドプロンプト(ターミナル)で計算ゲームをするプログラムを作っています(おもに練習用です) まだrubyの勉強初めて一週間

  • 解決済

    Rubyでずんどこキヨシ

    お疲れ様です。Takkoです。 現在Rubyを独学しているものです。 一年ほど前SE業界に入り込み、 その際の研修でjavaを使用してずんどこキヨシを作らされたことを思い

同じタグがついた質問を見る

  • Ruby

    7664questions

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