与OPC UA服务器的连接通过思科工作,但不通过Sinema RC客户端
Connection to OPC UA Server worked via Cisco but not via Sinema RC Client
我正在尝试连接到OPC服务器。我使用Softing OPC工具包,并设法通过Cisco Anyconnect成功连接,但无法通过Sinema RC Client V2.0成功连接。
我已经与服务器建立了VPN连接,检查了IP地址,并能够在我的终端中ping服务器。我正在使用的端口正在"侦听",所以这应该不是问题。我也确实输入了正确的端点。
这是我在 c++ 中的连接函数
EnumStatusCode OpcClient::connect()
{
EnumStatusCode result;
std::vector<tstring> transportProfileList;
std::vector<EndpointDescription> endpointDescriptions;
EnumUserTokenType desiredTokenType = EnumUserTokenType_Anonymous;
EnumMessageSecurityMode desiredSecurityMode = EnumMessageSecurityMode_None;
tstring desiredSecurityPolicy = SecurityPolicyUri_None;
result = pApp->getEndpointsFromServer(serverUrl, transportProfileList, endpointDescriptions);
if(StatusCode::isBad(result))
{
qDebug() << "No connection to ServerURL:";
}
else if (StatusCode::isGood(result))
{
for(unsigned int i = 0; i < endpointDescriptions.size(); i++)
{
for(unsigned int j = 0; j < endpointDescriptions[i].getUserIdentityTokenCount(); j++)
{
if(endpointDescriptions[i].getUserIdentityToken(j)->getTokenType() == desiredTokenType
&& endpointDescriptions[i].getMessageSecurityMode() == desiredSecurityMode
&& endpointDescriptions[i].getSecurityPolicy() == desiredSecurityPolicy)
{
_tprintf(_T("Endpoint %d:n")
_T(" URL: %sn")
_T(" Message security: %sn")
_T(" Security policy: %sn"),
i,
endpointDescriptions[i].getEndpointUrl().c_str(),
getEnumMessageSecurityModeString(endpointDescriptions[i].getMessageSecurityMode()),
endpointDescriptions[i].getSecurityPolicy().c_str());
const IUserTokenPolicy* pPolicy = endpointDescriptions[i].getUserIdentityToken(j);
_tprintf(_T(" User token policy %d: %sn"), j, getEnumUserTokenTypeString(pPolicy->getTokenType()));
qDebug() << "Trying to connect a new session...";
session = Client::Session::create();
session->setSessionTimeout(60 * 1000); // in milliseconds
session->setUrl(serverUrl);
session->setSecurityConfiguration(desiredSecurityMode, desiredSecurityPolicy);
UserIdentityToken userIdentityToken;
userIdentityToken.setAnonymousIdentityToken(endpointDescriptions[i].getUserIdentityToken(j)->getPolicyId()); // usually obtained by GetEndpoints
session->setUserIdentityToken(&userIdentityToken);
session->setUserSecurityPolicy(desiredSecurityPolicy); // usually obtained by GetEndpoints
pApp->addSession(session);
result = session->connect(true);
if(StatusCode::isBad(result))
{
qDebug() << "ERROR: Failed to connect the session: n"
<< getEnumStatusCodeString(result);
session->disconnect();
pApp->removeSession(session);
}
if(StatusCode::isGood(result))
{
qDebug() << "Successfully connected Session";
}
}
}
}
}
return result;
}
我是这样称呼它的(启动和启动函数都成功运行):
OpcClient::OpcClient()
{
EnumStatusCode result;
loadToolbox(NULL); // "NULL" only in the case that no creator is needed
ApplicationDescription appDesc;
appDesc.setApplicationType(EnumApplicationType_Client);
appDesc.setApplicationName(LocalizedText(_T("Client"), _T("en")));
appDesc.setApplicationUri(_T("urn:.../.../OpcUa/TestClient"));
appDesc.setProductUri(_T("urn:.../OpcUA/Softing_Development_Toolkit"));
serverUrl = _T("opc.tcp://myIP_andPort/Softing_dataFEED_OPC_Suite_UP");
pApp = Application::instance();
result = pApp->initialize(&appDesc);
if(StatusCode::isBad(result))
{
qDebug() << "Failed to initialize App";
}
else if (StatusCode::isGood(result))
{
qDebug() << "Successfully initialized App";
result = pApp->start();
if(StatusCode::isBad(result))
{
qDebug() << "Failed to start App";
}
else if (StatusCode::isGood(result))
{
qDebug() << "Successfully started App";
result = connect();
if(StatusCode::isBad(result))
{
qDebug() << "Failed to connect";
disconnect();
该函数确实会获得所有需要的输入,并通过思科工作,但不能与 Sinema RC 一起使用。知道为什么吗?
如果将来有人对此感兴趣:
使用默认的自动方法时,SinemaRC 似乎有时会错误地配置您的 NAT 设置。将这些更改回正确的IP后,一切又恢复了!
相关文章:
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 使用调试/崩溃报告将应用程序部署到客户端
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 从服务器传输到客户端的消息不会出现
- OpenSSL TLS服务器-使用客户端证书白名单
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 如何绑定 C++ gRPC 客户端的网络接口
- C++套接字客户端到 Python 服务器未创建连接
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- 将相机数据从服务器实时流式传输到客户端
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- GRPC C++ TLS 客户端 grpc::SslCredentials() 方法不返回
- 计算出有多少客户端可以连接到我正在使用的一些tcp服务器代码
- 如何暂停插孔音频客户端
- 与OPC UA服务器的连接通过思科工作,但不通过Sinema RC客户端