とある事情で通信を行うプログラムを書いてみたくなり、rubyが簡単そうだったので試してみた。ちなみに私はメカ屋さんだけど、多少のプログラム経験はある。でも通信するのは初めて。
参考情報
ちょっと検索するといろいろサンプルが出てきて、あまりに簡単そうだったので試してみる気になった。なんとなく参考情報1のがよさそうだったので、そのままコピペして試してみた。
ローカルPC(Windows 7)の中で試してみる分には動いたのだが、別PC(Windows 7)でサーバープログラムを動かしてクライアントを起動すると、socketを開くところでエラーが出た
正直見当もつかなかったのだが、やみくもに調べていて、サーバーでnetstatを見ると、(port 9999で起動しています)
なんかこの[::]というのが怪しい。何を意味しているのか検索しても出てこない。
諦めかけていた時に、参考情報3を見つけた。症状(error)が同じだ。
サーバー側でポートを開くときに、hostを省略すると全てのhostを受け入れるという事になっているはずなのだが、ここを明示的に指定するといいとの事(正直よくは分かっていないけど)。
サーバー側のプログラムの、
を
に変更すると、うまくいくようになった。
netstatを確認すると、
と変わっていた。
よくはわからないけど、解決。
参考情報
ちょっと検索するといろいろサンプルが出てきて、あまりに簡単そうだったので試してみる気になった。なんとなく参考情報1のがよさそうだったので、そのままコピペして試してみた。
ローカルPC(Windows 7)の中で試してみる分には動いたのだが、別PC(Windows 7)でサーバープログラムを動かしてクライアントを起動すると、socketを開くところでエラーが出た
echo-client.rb:5:in `initialize': No connection could be made because the target machine actively refused it. - connect(2) (Errno::ECONNREFUSED) from echo-client.rb:5:in `open' from echo-client.rb:5:in `main'
正直見当もつかなかったのだが、やみくもに調べていて、サーバーでnetstatを見ると、(port 9999で起動しています)
>netstat -an . TCP [::]:9999 [::]:0 LISTENING
諦めかけていた時に、参考情報3を見つけた。症状(error)が同じだ。
サーバー側でポートを開くときに、hostを省略すると全てのhostを受け入れるという事になっているはずなのだが、ここを明示的に指定するといいとの事(正直よくは分かっていないけど)。
サーバー側のプログラムの、
gate = TCPServer.open(port)
gate = TCPServer.open('',port)
netstatを確認すると、
>netstat -an . TCP 0.0.0.0:9999 0.0.0.0:0 LISTENING
よくはわからないけど、解決。
0 件のコメント:
コメントを投稿