내 안드로이드 응용 프로그램에 Erlang-Lib을 사용하여 서버에 연결하고 있습니다. 안드로이드 장치가 안드로이드 7보다 작은 서버에 연결하면 정상적으로 작동합니다. 이제 소니 Z5와 화웨이 메이트 9와 안드로이드 7.0과의 연결을 테스트했으며 더 이상 작동하지 않습니다.Android 7.0에서 null로 새 소켓 만들기가 작동하지 않습니다.
우리가 얼랑-lib 디렉토리로보고있는 경우 우리가 클래스에서이 호출을 볼 수 OtpSocketTransport :
당신이 여기에서 볼 수 있듯이의 InetAddress가 (문자열) 널 (null)로 설정/**
* @see Socket#Socket(InetAddress, int)
*/
public OtpSocketTransport(final InetAddress addr, final int port)
throws UnknownHostException, IOException {
socket = new Socket(addr, port);
socket.setTcpNoDelay(true);
}
: in line 286 . (클래스 OtpEpmd, 방법 r4_publish)
s = node.createTransport((String) null, EpmdPort.get());
여기
당신이 안드로이드 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가 null로 새로운 소켓을 만들 수있는 7보다 안드로이드와 장치에 대한
- 입니까?
- 이유가 무엇입니까 안드로이드가있는 장치의 경우은 null로 새 소켓을 만들 수 있습니까?
- Java에서 Socket 클래스가 변경 되었습니까?