【问题标题】:Java networking server-client errorJava 网络服务器-客户端错误
【发布时间】:2013-02-05 20:04:39
【问题描述】:

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

这是服务器的源代码,因为我发现可以通过命令行进行一些远程登录。 当我尝试建立连接时,它只是说Could not open connection to the host, on port 49163:Connection failed

服务器:

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: 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)

【问题讨论】:

  • 您可以发布(客户端?)引发异常的代码吗?此外,如果您在抛出异常的情况下保持相同的风格,除了用户友好的消息之外,打印出完整的堆栈跟踪可能会有所帮助。
  • Vishal,你怎么知道的?
  • @NikolaiNFetissov:我的错误。在经历 OP 正确提到的错误时出现了一些逃逸。
  • 在你已经创建了 ServerSocket 之后告诉 Java 更喜欢 IPv4 堆栈是没有意义的。

标签: java networking connection


【解决方案1】:

无法在端口 49163 上打开与主机的连接:连接失败

不,它没有。那不是 Java 消息。你的代码说,当你捕获一个 ConnectException 时,它有自己的更详细的消息。打印出来,你可能有希望找到问题所在。编写自己的消息并隐藏异常告诉您的内容很少是一个好主意。

消息可能是以下之一:

  • 'connection denied',表示你的目标主机或端口错误,或者有防火墙
  • “连接超时”,这是一个网络连接问题
  • 'no route to host',这是一个IP路由问题
  • “未知主机”,这又意味着您的服务器名称错误。

【讨论】:

  • 好的,我在创建socket之前放了IPv4,
  • 我试图编辑原始问题,添加客户端代码,但它一直告诉我格式不正确。错误消息是“连接被拒绝:连接”。
【解决方案2】:

我不知道我现在该笑还是该哭。 一个朋友告诉我MAYBE,也许问题可能是我尝试使用网络实习PC的外部IP登录,由于某种神秘的原因无法退出或无法重新进入。 有人尝试从其他地方登录,瞧!像魅力一样工作。

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 2011-02-10
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多