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 运行服务器和客户端时,客户端无法连接并崩溃,导致连接超时错误。当我从另一台电脑尝试时也会发生同样的情况。

顺便说一句,我已更改域的名称以确保某些安全性。“myserver.dyndns.co.za”是组成的。但我使用的域非常相似。

我需要知道我哪里出错了,为什么我无法连接到服务器。

我也知道通过 localhost 连接可以解决我的问题,但这仅适用于我网络上的计算机。我更关心从世界任何地方获得一台机器进行连接,因此需要动态 dns 和端口转发。

我的第一篇文章,所以我感谢所有的帮助。提前致谢

4

0 回答 0