サーバーに接続するサーバーとクライアントを作成する必要があります。パブリックIPアドレスに接続するJavaソケット
問題: "クライアントはローカルホストにしか接続できませんが、インターネット上のサーバーには接続できません。 」と語った。
まず、ポートが転送され、到達可能であることを確認しました。ポートをテストしました。第2に、サーバーマシンから完全にファイアウォールを無効にしました。以下
私が使用していたテストコードです:
サーバー:単なる空想何も - クライアントが接続されている場合だけで接続を待ち受ける他、終了しません。
public class Server {
public static void main(String args[]) {
try {
ServerSocket srvr = new ServerSocket(52000);
srvr.accept();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
クライアント:私は "biogenserver2.noip.me" に、サーバーのIPをマスクするno-ip.comを使用していました。 使用方法.getCanonicalHostName();はipを返します。
public class Client {
public static void main(String args[]) {
try {
String ip = Inet4Address.getByName("somets.noip.com").getCanonicalHostName();
InetSocketAddress sa = new InetSocketAddress(ip, 52000);
//Socket skt = new Socket("0.0.0.0", 52000); //local - this works fine.
Socket skt = new Socket();
skt.connect(sa);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
私はこれを実行すると、サーバーは正常に接続されますが、クライアントが「接続タイムアウト」の例外
を返す任意の助けが理解されるであろう。ありがとう。
ちょっと接続してみましたか?サーバコードと同様に 'Socket s = srvr.accept();'と 'Thread。sleep(100); '私は、接続にハンドシェイクを完了するのに十分な時間がないと思う。 – Fildor
はい、私は事実を持っている、同じ問題が続く。 localhostを介して接続するときに、それがうまく接続するコードに問題はありません。私もskt.connect(sa、50000)を試しました。 somoneが以下に示唆しているように私はまだ同じ結果を得る。 – NullOverFlow
明確にするために、no-ipから返されたパブリックIPを介してポートが開いていることを確認しました。サーバーマシンではないマシン上でその小さなtestclientを実行すると例外なく終了します。 – Fildor