0

在回答之前,请注意这是客户端问题,而不是服务器问题。由于我在终端使用 telnet 连接到服务器,并且 telnet 能够连接到服务器。现在,我不知道为什么connect方法无法连接我同时使用了本地主机地址和服务器的私有IP地址。它只是阻塞并且它从不调用回调方法。

                client.connect(new InetSocketAddress(hostname, 1993));
                callback.onConnection(); // Never invokes!
                OutputStream writer = client.getOutputStream();
                InputStream reader = client.getInputStream();
                byte[] buffer = new byte[1024 * 1024];

PS我是不是做错了什么。这不可能是防火墙问题,因为 telnet 能够连接到服务器,而且我认为我没有防火墙,因为我在我的 Ubuntu 机器上运行此代码。服务器和客户端都使用 TCP 协议,客户端和服务器端都没有抛出异常。任何关于可能出错的建议都非常有用。我可以显示更多代码,例如服务器代码。服务器是用 C++ 编写的,客户端是用 Java 编写的。

编辑:

我终于能够建立连接。我没有使用连接方法,而是使用套接字的构造函数来调用连接。我不知道为什么连接不起作用?

下面是代码修改:

            client = new Socket(hostname, port);
            callback.onConnection();
            OutputStream writer = client.getOutputStream();
            InputStream reader = client.getInputStream();
            byte[] buffer = new byte[1024 * 1024];
            reader.read(buffer);
4

3 回答 3

1

我想你正在使用阻塞套接字,所以connect方法将阻塞执行,直到建立连接。例如,您可以尝试使用http://docs.oracle.com/javase/1.4.2/docs/api/java/nio/channels/SocketChannel.html创建非阻塞套接字

于 2012-04-13T22:04:02.187 回答
1

您是否尝试在调用 connect 之前检查地址上的 isUnresolved() ?

于 2012-04-13T22:06:17.923 回答
0

我终于能够建立连接。我没有使用连接方法,而是使用套接字的构造函数来调用连接。我不知道为什么连接不起作用?

下面是代码修改:

        client = new Socket(hostname, port);
        callback.onConnection();
        OutputStream writer = client.getOutputStream();
        InputStream reader = client.getInputStream();
        byte[] buffer = new byte[1024 * 1024];
        reader.read(buffer);
于 2012-04-13T22:19:54.813 回答