2012-09-21 71 views
2

在我的Android项目中,我实现了一个Faye客户端。但是,当我拨打SocketChannel.socket().connect(...)时,连接挂起,下一行不运行。就好像我不设置超时,或者超时断开连接。Android连接到WebSocket hang

Thread.currentThread().setName("WebSocketConnector"); 
try { 
    // "java.net.SocketException: Address family not supported by protocol" 
    System.setProperty("java.net.preferIPv6Addresses", "false"); 

    mTransportChannel = SocketChannel.open(); 
    // mTransportChannel.configureBlocking(false); 
    // the following will block until connection was established or 
    // an error occurred! 
    mTransportChannel.socket().connect(
      new InetSocketAddress(mWsHost, mWsPort), mOptions.getSocketConnectTimeout()); 
    Log.i(TAG, "Socket connected"); 
    // before doing any data transfer on the socket, set socket 
    // options 
    mTransportChannel.socket().setSoTimeout(
      mOptions.getSocketReceiveTimeout()); 
    mTransportChannel.socket().setTcpNoDelay(
      mOptions.getTcpNoDelay()); 

    return null; 
} catch (IOException e) { 
    Log.e(TAG, e.getMessage()); 
    return e.getMessage(); 
} 

如果我这样做了:

mTransportChannel = SocketChannel.open(); 
mTransportChannel.configureBlocking(false); 
mTransportChannel.connect(socketAddress); 

SocketChannel .isConnected() return false 

什么问题我不明白?

回答

0

甚至在拨打connect()之前,DNS分辨率可能会被阻止。将new InetSocketAddress(mWsHost, mWsPort)放在一个单独的行上,并打印出结果。你有可能呆在那里。

如果不是这种情况,请检查您是否可以通过telnet连接到目标主机/端口:

~$ telnet host port 
+0

InetSocketAddress socketAdd = new InetSocketAddress(“172.20.71.4”,9292); boolean resolve = socketAdd.isUnresolved(); 在socketAdd主机null和端口9292,为什么?并解决错误 – JULI

+0

在命令行尝试'telnet 172.20.71.4 9292'。那样有用吗? –