こんばんわ
ソケットプログラムを作ったのですが、
現在ネットワークを介しての接続テストをするたび、通信相手役を友人にして頂いています。
本当はプログラムを直すたびに接続テストを行いたいのですが、
さすがに毎回つき合わせるのも悪いので、思うようにテストができず困っています。
ルーター越しの接続テストを単独で行う方法はないでしょうか?
詳しい方に知恵を貸していただけたらと思います。
↓説明不足なので補足をさせて頂きます。
winsockを用いてtcpで通信するコンソールアプリケーションを、
win32プロジェクトに書き直しました。
現状:IP、127.0.0.1での単独での接続テストでは通信できるが、
ルーター越しにネットを介しての接続テストでは通信できない。
・接続先IPはローカルでなくグローバルIPを指定している。
・サーバー側のportはtcp用のポートを開放している。
(サーバー側の許可を取りポートスキャンもしましたが、開放できているようでした。)
・元のコンソールアプリケーションではルーター越しでも通信できている。
・パケットキャプチャしてみてもどちらにもまったくパケットが届いていない。
・win32プロジェクト側はブロッキングするソケット関数部分のみマルチスレッドにしている。
通信できなり理由がわかる方はそちらも合わせて指摘していただきたいです。
以上になります。どうかよろしくお願い致します。
単独でネットワークプログラムの動作確認をする良い方法が知りたいです
Re:単独でネットワークプログラムの動作確認をする良い方法が知りたいです
ルータ越しでなければならない理由があるのでしょうか?
自分のローカルネットワークに、別PCや仮想マシンを用意して、
接続するのでは駄目なのでしょうか?
自分のローカルネットワークに、別PCや仮想マシンを用意して、
接続するのでは駄目なのでしょうか?
Re:単独でネットワークプログラムの動作確認をする良い方法が知りたいです
>ぽこさん
ご回答ありがとうございます
質問の仕方が悪かったようです。申し訳ありません。
ローカルでの接続はすでにできることを確認しておりまして、
もともとルーター越しの接続を目的としたプログラムですので、
ルーター越しの接続をしたいのですが接続できません。
その為プログラムを直しているのですが、
直すたびほかの方にテストに付き合っていただかないといけない状況をどうにかしたいのです。
ご回答ありがとうございます
質問の仕方が悪かったようです。申し訳ありません。
ローカルでの接続はすでにできることを確認しておりまして、
もともとルーター越しの接続を目的としたプログラムですので、
ルーター越しの接続をしたいのですが接続できません。
その為プログラムを直しているのですが、
直すたびほかの方にテストに付き合っていただかないといけない状況をどうにかしたいのです。
Re:単独でネットワークプログラムの動作確認をする良い方法が知りたいです
レンタルサーバーを借りて、そいつ相手に通信するぐらいしか思いつきません。
一旦通信は外に出る必要があるので、どうやっても難しいです。
一旦通信は外に出る必要があるので、どうやっても難しいです。
Re:単独でネットワークプログラムの動作確認をする良い方法が知りたいです
ルータ越えをやりたいのであれば、仮想マシンを3つ作って、内1つをルータとして動かしてはどうでしょうか?
もう一度お聞きしますが、ルータ(ローカルネットワーク(10.0.0.0/8とか192.168.0.0/16とか))内で、
複数のPCを使用しての接続テストは行ないましたか?
#現象的にルータ越え云々関係なさそうです。
もう一度お聞きしますが、ルータ(ローカルネットワーク(10.0.0.0/8とか192.168.0.0/16とか))内で、
複数のPCを使用しての接続テストは行ないましたか?
#現象的にルータ越え云々関係なさそうです。
Re:単独でネットワークプログラムの動作確認をする良い方法が知りたいです
>softyaさん、ぽこさん
ご回答ありがとうございます。
レンタルサーバーですか、低価格のものもあるようなので、検討してみたいと思います。
使ったことがないので詳しくはわからないのですが、
レンタルサーバーに受信プログラムをおいてtelnetなどで起動するという流れでいいのでしょうか。
レンタルサーバーってtelnetつかえるのかちと調べてきます。
申し訳ありません。仮想マシンとの接続というのが知識不足でよくわかりません。
VMWAREをインストールして、接続してみるということであっているのでしょうか?
VMWAREをつかうにもlinuxしかVM用のOSをすぐには用意できません。
unixライクosには詳しくないのでよくわからないのですが、
win32プロジェクトを動作させるエミュレーターのようなものがあるのでしょうか?
内1つをルータをして動かすという部分もちょっとわかりません。
質問ばかりになってしまい、大変申し訳ないのですがご教授いただけないでしょうか?
ローカルネットワークでの接続テストに関しましては、PCとノートをLANで接続して行いました。
接続の仕方については自信がないのですが、このやり方は失敗してますでしょうか?
ご回答ありがとうございます。
レンタルサーバーですか、低価格のものもあるようなので、検討してみたいと思います。
使ったことがないので詳しくはわからないのですが、
レンタルサーバーに受信プログラムをおいてtelnetなどで起動するという流れでいいのでしょうか。
レンタルサーバーってtelnetつかえるのかちと調べてきます。
申し訳ありません。仮想マシンとの接続というのが知識不足でよくわかりません。
VMWAREをインストールして、接続してみるということであっているのでしょうか?
VMWAREをつかうにもlinuxしかVM用のOSをすぐには用意できません。
unixライクosには詳しくないのでよくわからないのですが、
win32プロジェクトを動作させるエミュレーターのようなものがあるのでしょうか?
内1つをルータをして動かすという部分もちょっとわかりません。
質問ばかりになってしまい、大変申し訳ないのですがご教授いただけないでしょうか?
ローカルネットワークでの接続テストに関しましては、PCとノートをLANで接続して行いました。
接続の仕方については自信がないのですが、このやり方は失敗してますでしょうか?
Re:単独でネットワークプログラムの動作確認をする良い方法が知りたいです
インターネットの遅延を含めてテストしたいって事ですよね。
そう意味だとレンタルサーバーが一つの方法です。
レンタルサーバーはC言語が動かないのも結構あるので、よく確認してください。
Dixq(管理人)さんが使っているさくらレンタルサーバーは、コース次第で使える様です。
>レンタルサーバーに受信プログラムをおいてtelnetなどで起動するという流れでいいのでしょうか。
>レンタルサーバーってtelnetつかえるのかちと調べてきます。
レンタルサーバーでC言語のCGIを作って、ポートを変えてパケットを送り返すものを作るとか、クライアントの振りをするとか幾つか手があると思います。
LAN/ローカルサーバーで遅延をシミュレートする方法も調べてみました。
Linuxにこんなのがあるので出来ないことは無いと思います。
http://www.playing-engineer.com/?p=222
あとLinuxでWin32を動かすのは、wineってのを使います。
これらを組み合わせればある程度はローカルでもテストできるかも知れません。
調べることは多そうですが。
そう意味だとレンタルサーバーが一つの方法です。
レンタルサーバーはC言語が動かないのも結構あるので、よく確認してください。
Dixq(管理人)さんが使っているさくらレンタルサーバーは、コース次第で使える様です。
>レンタルサーバーに受信プログラムをおいてtelnetなどで起動するという流れでいいのでしょうか。
>レンタルサーバーってtelnetつかえるのかちと調べてきます。
レンタルサーバーでC言語のCGIを作って、ポートを変えてパケットを送り返すものを作るとか、クライアントの振りをするとか幾つか手があると思います。
LAN/ローカルサーバーで遅延をシミュレートする方法も調べてみました。
Linuxにこんなのがあるので出来ないことは無いと思います。
http://www.playing-engineer.com/?p=222
あとLinuxでWin32を動かすのは、wineってのを使います。
これらを組み合わせればある程度はローカルでもテストできるかも知れません。
調べることは多そうですが。
Re:単独でネットワークプログラムの動作確認をする良い方法が知りたいです
>softyaさん
ご回答ありがとうございます。
疑問に非常に丁寧に答えていただけて感謝いたします。
わざわざ参考になるページまで紹介して頂いてありがとうございました。
ここ数日プログラムを書き直していまして、なんとか動作するようになりました。
ブロッキングする関数にタイムアウトを設けるのをやめ、
acceptからsendまでの間に待ち時間を入れ、
マルチスレッドをやめたところ何故か通信できるようになりました。
ただこのままだとブロッキング部分で固まってしまうため、
どの部分が悪かったのか、今後テストし調べてみようと思います。
紹介していただいたページを参考に、linuxでテスト環境も構築してみました。
設定がわからない部分が多く、知識不足を痛感しております。
CGIはPerlで簡単なものを作った経験があるため、
最初に紹介していただいた、レンタルサーバーを借りる方法でテストを行おうと思います。
それでは御指南ありがとうございました。
そして返信が遅くなってしまい申し訳ありませんでした。
linuxかCGIのどちらかで動作確認をとってからと考えていたのですが、
linuxの設定でだいぶ時間がかかってしまい、2日も間があいてしまいました。
申し訳ありませんでした。
思った以上に親切な説明をいただけて本当に感謝しております。
ご回答ありがとうございます。
疑問に非常に丁寧に答えていただけて感謝いたします。
わざわざ参考になるページまで紹介して頂いてありがとうございました。
ここ数日プログラムを書き直していまして、なんとか動作するようになりました。
ブロッキングする関数にタイムアウトを設けるのをやめ、
acceptからsendまでの間に待ち時間を入れ、
マルチスレッドをやめたところ何故か通信できるようになりました。
ただこのままだとブロッキング部分で固まってしまうため、
どの部分が悪かったのか、今後テストし調べてみようと思います。
紹介していただいたページを参考に、linuxでテスト環境も構築してみました。
設定がわからない部分が多く、知識不足を痛感しております。
CGIはPerlで簡単なものを作った経験があるため、
最初に紹介していただいた、レンタルサーバーを借りる方法でテストを行おうと思います。
それでは御指南ありがとうございました。
そして返信が遅くなってしまい申し訳ありませんでした。
linuxかCGIのどちらかで動作確認をとってからと考えていたのですが、
linuxの設定でだいぶ時間がかかってしまい、2日も間があいてしまいました。
申し訳ありませんでした。
思った以上に親切な説明をいただけて本当に感謝しております。