私は小さなサーバー/クライアント プロジェクトに取り組んでいますが、進行を妨げている小さな問題に遭遇しています。
プログラムのコア(クライアントとサーバー)を釘付けにし、2つを使用して接続できたと思いますlocalhost
が、外部IPを介して接続しようとすると例外が発生します:
java.net.ConnectException: Connection refused
java.net.PlainSocketImpl.socketConnect(Native Method)
java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
java.net.Socket.connect(Socket.java:529)
java.net.Socket.connect(Socket.java:478)
java.net.Socket.<init>(Socket.java:375)
java.net.Socket.<init>(Socket.java:218)
networking.Client.run(Client.java:183)
java.lang.Thread.run(Thread.java:680)
最初はポート 10 を使用しようとしましたが、Mac では何らかの理由で 0 から 1023 までのポートが機能しないことが判明したため、その範囲外のポートを選択しました。との接続は機能しlocalhost
ましたが、(通常のユーザーと同じように) 外部 IP に接続しようとすると、その例外が発生しました。私のポートは適切に転送され、実行中sudo lsof -i tcp -nP
( netstat
Mac の場合) は、実際に私のサーバーが実際に正しいポートでリッスンしていることを示します。これにより、問題はクライアントにある可能性があると信じるようになりましたが、実際にはわかりません.
sudo lsof -i tcp -nP
Terminal.app からの出力は次のとおりです。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 35423 MeshulamSilk 41u IPv6 0xc949f3cdb29dfdcd 0t0 TCP *:63370 (LISTEN)
java 35423 MeshulamSilk 42u IPv6 0xc949f3cdbbf1b96d 0t0 TCP [::1]:63992->[::1]:63991 (TIME_WAIT)
これらの投稿がややこしくなるのはわかっているので、コードを Gist にアップロードしました。誰かが私にここに追加してほしい場合は、私に知らせてください。
注意すべき点:
- MooConsole は、エクスポートされたプログラムのコンソールを提供する、私が作成したライブラリです。クライアントとサーバーの両方でテキストを表示するために使用しています。
- MooCommands は、コンソールから実行できるコマンドを表す私のライブラリの 1 つです。
- SocketThread は、新しい接続を処理するクラスです。これにより、サーバーは複数のクライアントを同時に接続できます。伸び
java.lang.Thread
ます。それが問題を引き起こしているとは思わないので、含めませんが、必要に応じて含めます。 Operations.DISCONNECT
切断を表す列挙定数です。
私が間違っていること、または単にしていないことを誰かが知っている場合は、私に知らせてください。