我在我的android應用程序中使用Erlang-Lib來連接到服務器。連接到Android設備小於android 7的服務器的連接工作正常。現在我已經用android 7.0測試了與Sony Z5和Huawei Mate 9的連接,並且它不再工作。在Android 7.0上創建新的Socket with null不起作用
如果我們看看到二郎-Lib的,我們會看到這個呼叫類OtpSocketTransport:
/**
* @see Socket#Socket(InetAddress, int)
*/
public OtpSocketTransport(final InetAddress addr, final int port)
throws UnknownHostException, IOException {
socket = new Socket(addr, port);
socket.setTcpNoDelay(true);
}
InetAddress是否是設置爲(字符串)空,你可以在這裏看到: in line 286 。 (類OtpEpmd,方法:r4_publish)
s = node.createTransport((String) null, EpmdPort.get());
在這裏,您可以看到設備在Android logcat的輸出與Android 7.0: (XXX被我改變)
02-22 13:00:40.518 31544-31886/com.xxx W/System.err: java.io.IOException: Nameserver not responding on xxx.com when publishing xxx
02-22 13:00:40.518 31544-31886/com.xxx W/System.err: at com.ericsson.otp.erlang.OtpEpmd.r4_publish(OtpEpmd.java:350)
02-22 13:00:40.518 31544-31886/com.xxx W/System.err: at com.ericsson.otp.erlang.OtpEpmd.publishPort(OtpEpmd.java:145)
02-22 13:00:40.519 31544-31886/com.xxx W/System.err: at com.ericsson.otp.erlang.OtpNode$Acceptor.publishPort(OtpNode.java:784)
02-22 13:00:40.519 31544-31886/com.xxx W/System.err: at com.ericsson.otp.erlang.OtpNode$Acceptor.<init>(OtpNode.java:776)
02-22 13:00:40.519 31544-31886/com.xxx W/System.err: at com.ericsson.otp.erlang.OtpNode.init(OtpNode.java:232)
02-22 13:00:40.519 31544-31886/com.xxx W/System.err: at com.ericsson.otp.erlang.OtpNode.<init>(OtpNode.java:196)
02-22 13:00:40.519 31544-31886/com.xxx W/System.err: at com.ericsson.otp.erlang.OtpNode.<init>(OtpNode.java:149)
02-22 13:00:40.519 31544-31886/com.xxx W/System.err: at com.xxx.Manager.ErlifGen.<init>(ErlifGen.java:27)
02-22 13:00:40.519 31544-31886/com.xxx W/System.err: at com.xxx.Manager.Manager$ActivateThread.run(Manager.java:518)
我可以調整OtpEpmd類中的代碼到這個,然後它正在工作:
if (Build.VERSION.SDK_INT < 24) { //24 is Android 7 Nougat
s = node.createTransport((String)null, EpmdPort.get());
} else {
s = node.createTransport(InetAddress.getByName("localhost"), EpmdPort.get());
}
我的問題是:
- 爲什麼OK配合Android低於7的設備來創建空新的Socket?
- 爲什麼它是不行設備與android 7創建一個新的Socket與null?
- 從java中的Socket類有變化嗎?