- ベストアンサー
サーバからクライアントにポート番号を指定する方法
java初心者です。 現在javaを使ってサーバとクライアントのsocketプログラムを作っています。 動作としてはサーバ側がクライアントに対して接続するポートを指定し、以後クライアントがサーバに対して通信を行う際には指定されたポート番号を使って通信を行うような動作をさせたいのですがうまくいきません。 そのため、みなさんの知恵を拝借したいのですが、アドバイス等頂けないでしょうか。 また、javaでは実現不可能だとするのでしたら、その理由も詳しく教えていただけると幸いです。 どうぞよろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
FTP のPASV モードのような振る舞いですね。 であれば、Javaで実装されたFTPサーバのソースが参考になるのではないでしょうか? 例えば http://mina.apache.org/ftpserver/ あたりでしょうか? ただ、その方式をとるに至った要件が同時アクセスのためのポートの占有回避であれば、 普通に java.net.ServerSocket で実装してしまえば、面倒な事はあまり意識せずに実現できるのではないかと思います。
その他の回答 (5)
- DoubleHead
- ベストアンサー率41% (12/29)
だから、 手法そのものは別に問題はない。 あなたの考えた方法は別にむずかしくはない。 でも あなたが何について悩んでいるのかわからない、
- notnot
- ベストアンサー率47% (4900/10358)
No1です。 補足は、 1.クライアントからサーバーのAポートに接続する 2.サーバーから番号Xをクライアントに送る 3.クライアントはサーバーとのセッションを一度切る 4.クライアントからサーバーのXポートに接続する ということでしょうか? どこにも難しさは無いと思うのですが、何が難しいのですか?
- DoubleHead
- ベストアンサー率41% (12/29)
いや、 具体的っていうのは うまくいかない、というのはどういうことですか?と 例えば こういうプログラムを作ってみたけど この部分でこういうエラーが出ています、 どのようにすれば解決できるでしょうか? と、 そういうレベルで書かないと答えようがないよということ。 妄想レベルのことをどうでしょうか?と聞かれてもね。 やろうとしていることはJavaであるとか関係なく出来ます。 問題があるとすればJava以外の問題であることが多いでしょう。 任意のポート番号を開くにはOSの権限やセキュリティーソフトの設定などが 必要なことがありますよ。 一部でもいいのでソースをさらすとかしないと
- wormhole
- ベストアンサー率28% (1626/5665)
どこがうまくいかないんでしょうか? それがわからないというのであれば、まずはそれを調べるべきじゃないかな。
- notnot
- ベストアンサー率47% (4900/10358)
もう少し具体的に書いてくれないことには、何とも言いがたいです。
補足
サーバ・クライアントをまずsocketで接続し、その際にサーバ側の現在接続しているものと別のポート番号をクライアント側に通知する、という説明でどうですかね? クライアント側がサーバの指定した新たなポート番号で接続できるようにしたいので、最初のソケット接続でポート番号自体をクライアントに渡せればいけるのではないかと考えているのですが・・・。 ちなみに一回目の接続と二回目の接続は両方同じIPで行う予定です。
お礼
なるほど、FTPでPASAモードという似たような振る舞いをするものがあったのですか。 そちらについても少し調べて参考にしてみます。ありがとうございます。 そして質問をする以前の状態で質問をしたみたいで申し訳ありませんでした。 とりあえずは他の皆様も言うとおり、もう少し自分で試すなり行なってから質問をするよう心がけます。