java socket传出路由器的麻烦

时间:2013-07-08 21:03:02

标签: java sockets routing

我正在做一些通过互联网使用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和端口转发。

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

0 个答案:

没有答案