Java网络服务器客户端错误

Java网络服务器客户端错误,java,networking,connection,Java,Networking,Connection,我正在尝试编写一个(对于初学者来说很简单的)服务器-客户机东西,只是为了建立一个连接,看看它是否工作。确实如此。只要我呆在自己的四壁之内。当我试图通过我的IP路由器时,客户端就会产生一条非常精细的错误消息。所有常见的疑点都被消除了:路由器端口转发打开了,防火墙没有干扰(好吧,当我关闭它时它仍然不工作),canyouseeme.org说它可以在服务器运行时建立到我选择的端口的连接 这是服务器的源代码,因为我发现只需通过命令行进行一点telnet就可以了。 当我尝试建立连接时,它只是说,无法在端口4

我正在尝试编写一个(对于初学者来说很简单的)服务器-客户机东西,只是为了建立一个连接,看看它是否工作。确实如此。只要我呆在自己的四壁之内。当我试图通过我的IP路由器时,客户端就会产生一条非常精细的错误消息。所有常见的疑点都被消除了:路由器端口转发打开了,防火墙没有干扰(好吧,当我关闭它时它仍然不工作),canyouseeme.org说它可以在服务器运行时建立到我选择的端口的连接

这是服务器的源代码,因为我发现只需通过命令行进行一点telnet就可以了。 当我尝试建立连接时,它只是说,
无法在端口49163上打开与主机的连接:连接失败

服务器:

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

public class ChatServer {
    public static void main(String[] args) throws IOException {

        ServerSocket server = null;

        try {
            System.setProperty("java.net.preferIPv4Stack" , "true");
            server = new ServerSocket(49163);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 49163.");
            System.exit(1);
        }

        Socket client = null;
        try {
            client = server.accept();
        } catch (IOException e) {
            System.err.println("Accept failed.");
            System.exit(1);
        }

        PrintWriter out = new PrintWriter(client.getOutputStream(), true);
        BufferedReader in = new BufferedReader(newInputStreamReader(client.getInputStream()));
        String inputLine;
        String outputLine;

        out.println("Connection established");
        while ((inputLine = in.readLine()) != null) {
            if (inputLine.equals("exit")) {
                break;
            }
        outputLine = inputLine;
        out.println(outputLine);
        }
        out.close();
        in.close();
        client.close();
        server.close();
        System.out.println("Server offline");
    }
}
哦,是的,preferIP4vStack是我在Stackoverflow上学到的东西,但它似乎对我不起作用

由于某些原因,我无法为客户端导入代码,我不断收到有关格式化的消息,但我就是搞不懂。但在我看来,我甚至无法通过命令行连接(当我尝试连接到“真正”的IP时),因此客户端不必参与。但对于希望看到错误的用户:

java.net.ConnectException:连接被拒绝:连接
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.PlainSocketImpl.doConnect(未知源)
位于java.net.PlainSocketImpl.connectToAddress(未知源)
位于java.net.PlainSocketImpl.connect(未知源)
位于java.net.socksocketimpl.connect(未知源)
位于java.net.Socket.connect(未知源)
位于java.net.Socket.connect(未知源)
位于java.net.Socket。(未知源)
位于java.net.Socket。(未知源)
位于ChatClient.main(ChatClient.java:12)
无法在端口49163上打开与主机的连接:连接失败

没有。这不是Java消息。当您捕获到一个ConnectException时,您的代码会这样说,该ConnectException本身有一条更详细的消息。把它打印出来,你可能会有一些希望找到哪里出了问题。编造你自己的信息,并压制异常告诉你的信息,这几乎不是一个好主意

该消息可能是以下消息之一:

  • “连接被拒绝”,这意味着目标主机或端口错误,或者存在防火墙
  • “连接超时”,这是一个网络连接问题
  • “没有到主机的路由”,这是一个IP路由问题
  • “未知主机”,这同样意味着服务器名称错误

我不知道我现在是笑还是哭。 一位朋友告诉我,也许,也许问题是我试图用网络实习生PC的外部IP登录,但由于某种神秘的原因,它无法退出或无法返回。
有人尝试从其他地方登录,瞧!工作起来很有魅力。

您能发布引发异常的(客户端?)代码吗?此外,如果抛出异常的对象保持相同的样式,除了用户友好的消息外,打印完整的堆栈跟踪可能会有所帮助。Vishal,你是怎么知道的?@NikolaiNFetissov:我错了。在经历OP正确提到的错误时,有一些逃逸。在你已经创建了ServerSocket之后,告诉Java更喜欢IPv4堆栈是毫无意义的。好吧,我在创建套接字之前放置了IPv4,我尝试编辑原始问题,添加了客户端代码,但它一直告诉我格式不对。错误消息为“连接被拒绝:连接”。
java.net.ConnectException: Connection refused: connect
  at java.net.PlainSocketImpl.socketConnect(Native Method)
  at java.net.PlainSocketImpl.doConnect(Unknown Source)
  at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
  at java.net.PlainSocketImpl.connect(Unknown Source)
  at java.net.SocksSocketImpl.connect(Unknown Source)
  at java.net.Socket.connect(Unknown Source)
  at java.net.Socket.connect(Unknown Source)
  at java.net.Socket.<init>(Unknown Source)
  at java.net.Socket.<init>(Unknown Source)
  at ChatClient.main(ChatClient.java:12)