Java套接字方法块当调用'connect'时

时间:2012-04-13 21:49:28

标签: java sockets

在回答之前,请注意这是客户端问题,而不是服务器问题。由于我在终端中使用telnet,连接到服务器,telnet能够连接到服务器。现在,我不知道为什么connect方法无法连接我同时使用了localhost地址和服务器的私有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];
P.S我做错了什么。它不能是防火墙问题,因为telnet能够连接到服务器,我认为我没有防火墙,因为我在我的Ubuntu机器上运行此代码。服务器和客户端都使用TCP协议,并且在客户端和服务器端都没有抛出任何异常。对可能出错的任何建议都非常有用。我可以显示更多代码,如服务器代码。服务器是用C ++编写的,客户端是用Java编写的。

编辑:

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

以下是代码修改:

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

以下是代码修改:

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