2011-03-20 53 views
0

我試圖打開插座到不同的主機,對於我在非阻塞模式下使用的SocketChannel:爲什麼在SocketChannel中連接不能在非阻塞模式下運行?

ListIterator iter = hosts.listIterator(); 
SocketChannel sChannel = null; 
while (iter.hasNext()) 
{ 
    Host host = iter.next(); 
    sChannel = SocketChannel.open(); 
    sChannel.configureBlocking(false); 
    sChannel.connect(new InetSocketAddress(host, 80)); 
} 

,後來我打電話finishConnect()所有。

問題是connect()似乎阻塞。

+0

您發佈的代碼顯示您在循環內聲明'sChannel'。你怎麼可能稍後調用'finishConnect()'? (或者使用這些頻道) – 2011-03-20 21:28:22

回答

0

我看到相同的行爲(在Android上)。它似乎出現不論是否的InetSocketAddress通過實例化......

  1. 新的InetSocketAddress(字符串主機,詮釋端口)
  2. 新的InetSocketAddress(InetAddress.getByAddress(字節[] ip地址))
  3. 新的InetSocketAddress(InetAddress.getByAddress(字符串主機,字節[] ip地址))

堆棧我看到它是如下...

InetAddress.gethostbyaddr(byte[]) line: not available [native method] 
InetAddress.getHostByAddrImpl(byte[]) line: 558 
Inet4Address(InetAddress).getHostName() line: 352 
SocketChannelImpl.connect(SocketAddress) line: 259 
ScannerTargetAuxillaryTest.runBusinessUseCase(InetSocketAddress[]) line: 38 
ScannerTargetAuxillaryTest.testVersion2() line: 125 
ScannerTargetAuxillaryTest.main() line: 247 
TestActivity.onCreate(Bundle) line: 46 
Instrumentation.callActivityOnCreate(Activity, Bundle) line: 1047 
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2466 
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2519 
ActivityThread.access$2200(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 123 
ActivityThread$H.handleMessage(Message) line: 1870 
ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 4370  
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
Method.invoke(Object, Object...) line: 521 
ZygoteInit$MethodAndArgsCaller.run() line: 868 
ZygoteInit.main(String[]) line: 626 
NativeStart.main(String[]) line: not available [native method] 
相關問題