项目opu ua所在服务器内网地址是192.168.111.14 对外映射地址是172.16.105.161
Endpoint url的地址是:opc.tcp://172.16.105.161:8888
使用milo-0.6.1连接出现:
连接opcUaServer失败:java.util.concurrent.ExecutionException: UaException: status=Bad_Timeout, message=io.hg_netty.channel.ConnectTimeoutException: connection timed out: /192.168.111.14:8888
milo例子中OpcUaClient的创建如下:
ouc = OpcUaClient.create(this.url,
endpoints -> {
final Optional<EndpointDescription> endpoint = endpoints
.stream()
.filter(e -> e.getSecurityPolicyUri().equals(SecurityPolicy.None.getUri()))
.findFirst();
configBuilder -> configBuilder
.setApplicationName(LocalizedText.english("eclipse milo opc-ua client"))
.setApplicationUri("urn:eclipse:milo:examples:client")
//访问方式
.setIdentityProvider(ip)
.setRequestTimeout(UInteger.valueOf(60000))
.build()
);
上述代码是使用url去服务器端点列表查找符合条件的第一个端点,返回的地址使用的是内网地址,因此不能使用。需要重新构造EndpointDescription 对象即可
ouc = OpcUaClient.create(this.url,
endpoints -> {
final Optional<EndpointDescription> endpoint = endpoints
.stream()
.filter(e -> e.getSecurityPolicyUri().equals(SecurityPolicy.None.getUri()))
.findFirst();
EndpointDescription newEndpoint=new EndpointDescription(this.url,endpoint.get().getServer(),endpoint.get().getServerCertificate(),
endpoint.get().getSecurityMode(),endpoint.get().getSecurityPolicyUri(),endpoint.get().getUserIdentityTokens(),
endpoint.get().getTransportProfileUri(), endpoint.get().getSecurityLevel());
return Optional.of(newEndpoint);
},
configBuilder -> configBuilder
.setApplicationName(LocalizedText.english("eclipse milo opc-ua client"))
.setApplicationUri("urn:eclipse:milo:examples:client")
//访问方式
.setIdentityProvider(ip)
.setRequestTimeout(UInteger.valueOf(60000))
.build()
);