2

インターネット経由でJavaを使用して基本的なサーバー/クライアントアプリケーションを作成する作業を行っています。ネット上でサーバー/クライアント アプリのコードを見つけ、ホストとして localhost を使用して実行しましたが、問題なく正常に機能します。私が知る限り、コードに問題はありません

ルーターでポート転送を有効にしており、PC またはルーターにファイアウォールが存在しません。また、動的 DNS を使用して、ドメイン名を使用して他のマシンからルーターの IP にアクセスしています。ポート #33333 を使用

サーバークラス

import java.net.*;
import java.io.*;

public class GreetingServer extends Thread
{
   private ServerSocket serverSocket;

   public GreetingServer(int port) throws IOException
   {
      serverSocket = new ServerSocket(port);
   }

   public void run()
   {
      while(true)
      {
         try
         {
            System.out.println("Waiting for client on port " +
            serverSocket.getLocalPort() + "...");
            Socket server = serverSocket.accept();
            System.out.println("Just connected to "
                  + server.getRemoteSocketAddress());
            DataInputStream in =
                  new DataInputStream(server.getInputStream());
            System.out.println(in.readUTF());
            DataOutputStream out =
                 new DataOutputStream(server.getOutputStream());
            out.writeUTF("Thank you for connecting to "
              + server.getLocalSocketAddress() + "\nGoodbye!");
            server.close();
         }catch(SocketTimeoutException s)
         {
            System.out.println("Socket timed out!");
            break;
         }catch(IOException e)
         {
            e.printStackTrace();
            break;
         }
      }
   }
   public static void main(String [] args)
   {
      int port = 33333;
      try
      {
         Thread t = new GreetingServer(port);
         t.start();
      }catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

クライアント

import java.net.*;
import java.io.*;

public class GreetingClient
{
   public static void main(String [] args)
   {
      InetAddress ip;
      String serverName;
      int port = 33333;
      try
      {
         ip = InetAddress.getByName("myserver.dyndns.co.za");
         serverName = ip.getHostAddress();
         System.out.println("Connecting to " + serverName
                             + " on port " + port);
         Socket client = new Socket(ip, port);
         System.out.println("Just connected to "
                      + client.getRemoteSocketAddress());
         OutputStream outToServer = client.getOutputStream();
         DataOutputStream out =
                       new DataOutputStream(outToServer);

         out.writeUTF("Hello from "
                      + client.getLocalSocketAddress());
         InputStream inFromServer = client.getInputStream();
         DataInputStream in =
                        new DataInputStream(inFromServer);
         System.out.println("Server says " + in.readUTF());
         client.close();
      }catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

私が気づいたこと:

  • サーバーを実行し、Canyouseeme.org などのサイトを使用してポートが開いているかどうかを確認すると、コードどおりに成功し、サーバーは例外をスローします。

  • サーバーとクライアントを同じ PC から実行すると、クライアントが接続せず、接続タイムアウト エラーが発生してクラッシュします。別のPCから試しても同じことが起こります。

ところで、セキュリティを確保するためにドメインの名前を変更しました。「myserver.dyndns.co.za」で構成されています。しかし、私が使用するドメインは非常に似ています。

どこが間違っているのか、なぜサーバーに接続できないのかを知る必要があります。

また、ローカルホスト経由で接続すると問題が解決することもわかっていますが、それはネットワーク上のコンピューターに対してのみ機能します。私は、世界中のどこからでもマシンを接続できるようにすることについてより懸念しているため、動的 DNS とポート フォワーディングが必要です。

私の最初の投稿なので、すべての助けに感謝します。前もって感謝します

4

0 に答える 0