在回答之前,请注意这是客户端问题,而不是服务器问题。由于我在终端中使用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);
答案 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);