mdsplus之通过C和C++远程访问


首先当然需要将远程mdsplus服务器防火墙的相应端口开放,或者关闭防火墙。

说明,下面中本地IP为202.127.202.142

                         远程mdsplus服务器IP为202.127.204.220

eastpower树位于202.127.204.220

一、C语言中的远程访问mdsplus

1.在程序中先connect服务器,再open打开相应树,并且这种情况下在本地可以配置要打开tree的环境变量(export或在envsyms里面配置),且任意配置不受影响,代码如下:

//mdsplus_read.c
#include<mdslib.h>
#include<mdsshr.h>
#include<stdio.h>
#include<string.h>
#define statusOk(status) ((status)&1)
int getSize(char*sigName);
int main(int argc,char** argv){
	int socket=-1;
	int status=-1;
	int shot=90000;
	char tName[]="eastpower";
	char ip[]="202.127.204.220:8000";
	int size=0;
	socket=MdsConnect(ip);//:8001");
	if(-1==socket){
		fprintf(stderr,"Error connecting to mdsip server.\n");
//		return -1;
	}
	status=MdsOpen(tName,&shot);
	if(!statusOk(status)){
		fprintf(stderr,"Error opening tree for shot %d:%s.\n",shot,MdsGetMsg(status));
		return -1;
	}else{
		fprintf(stderr,"opening tree for shot %d:%s Successful.\n",shot,MdsGetMsg(status));
	}//
	size=getSize("f010_S");
	printf("size=%d\n",size);
	if(size<1){
		fprintf(stderr,"Error retrieving length of signal\n");
		return -1;
	}//if
	return 0;
}
int getSize(char*sigName){
	int dtypelong=DTYPE_LONG;
	int retSize;
	int lenDescr;
	int null=0;
	int status;
	int effNum=0;
	char expression[1024];
	sprintf(expression,"SIZE(%s)",sigName);
	lenDescr=descr(&dtypelong,&retSize,&null);
	status=MdsValue(expression,&lenDescr,&null,&effNum);
	if(!statusOk(status)){
		fprintf(stderr,"Error getting the size of %s.\n",sigName);
		return -1;
	}//if
	return retSize;
}//getSize()

Makefile如下:

cc=gcc
mdsplus_read:mdsplus_read.o
        cc mdsplus_read.o -L/usr/local/mdsplus/lib -lMdsLib -lMdsShr -lc -o mdsplus_read -std=c99
mdsplus_read.o:mdsplus_read.c
        cc -c mdsplus_read.c -o mdsplus_read.o -I/usr/local/mdsplus/include -std=c99

2.通过在本地envsyms中配置相应树的环境变量(修改了这个配置文件记得重新打开下终端加载环境变量),但是这种情况下,我只对8000端口测试成功,并且需要在envsyms省略不写8000端口,如下面:

eastpower_path 202.127.204.220::/var/ftp/pub/easttest
代码中不再需要connect远程mdsplus服务器,可以像访问本地mdsplus一样,如下只给出了main函数,其他同上:

int main(int argc,char** argv){
        int status=-1;
        int shot=90000;
        char tName[]="eastpower";
        int size;
        status=MdsOpen(tName,&shot);
        if(!statusOk(status)){
                fprintf(stderr,"Error opening tree for shot %d:%s.\n",shot,MdsGetMsg(status));
                return -1;
        }else{
                fprintf(stderr,"opening tree for shot %d:%s Successful.\n",shot,MdsGetMsg(status));
        }//
        size=getSize("f010_S");
        printf("size=%d\n",size);
        if(size<1){
                fprintf(stderr,"Error retrieving length of signal\n");
                return -1;
        }//if
        return 0;
}


二、C++语言中的远程访问mdsplus

1.类似于在C程序中先connect服务器,再open打开相应树:

//mdsplus_c++_sample2.cpp
#include<mdsobjects.h>
#include<cstdlib>
#include<iostream>
#include<string>
inline char * convert(const std::string & str){
        return const_cast<char *> (str.c_str());
}
int main(int argc,char** argv){
        std::string  treeName("eastpower");
        std::string nodeName("F010_S");
        try{
                MDSplus::Connection *conn = new MDSplus::Connection(convert("202.127.204.220"));
                conn->openTree(convert(treeName),9000);
                conn->closeTree(convert(treeName),9000);
        }catch(MDSplus::MdsException*exc){
                std::cout<<"Error appending segments:"<<exc->what()<<std::endl;;
        }
        return EXIT_SUCCESS;
}

Makefile如下:

cc=g++
mdsplus_c++_sample2:mdsplus_c++_sample2.o
        $(cc) mdsplus_c++_sample2.o -o mdsplus_c++_sample2 -L/usr/local/mdsplus/lib -lMdsObjectsCppShr
mdsplus_c++_sample2.o:mdsplus_c++_sample2.cpp
        $(cc) mdsplus_c++_sample2.cpp -c -o mdsplus_c++_sample2.o -I/usr/local/mdsplus/include -g

 2.通过在本地envsyms中配置相应树的环境变量,代码如下:

//mdsplus_c++_sample2.cpp
#include<mdsobjects.h>
#include<cstdlib>
#include<iostream>
#include<string>
inline char * convert(const std::string & str){
        return const_cast<char *> (str.c_str());
}
int main(int argc,char** argv){
        std::string  treeName("eastpower");
        std::string nodeName("F010_S");
        try{
                MDSplus::Tree * t= new MDSplus::Tree(convert(treeName),90000,convert("edit"));
                MDSplus::TreeNode * node=t->getNode(convert(nodeName));
                t->quit();
        }catch(MDSplus::MdsException*exc){
                std::cout<<"Error appending segments:"<<exc->what()<<std::endl;;
        }
        return EXIT_SUCCESS;
}


通过在本地envsyms中配置相应树的环境变量情况下,mdstcl和jScope工具都能像访问本地树一样打开远程mdsplus服务器上的树。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C C (即C语言) 是一种功能强大的编程语言,可以用来开发各种应用程序。在使用C语言编写代码时,我们可以通过访问远程服务来实现更多的功能。 访问远程服务是指通过网络连接到远程服务器并与之通信。访问远程服务可以帮助我们获取远程服务器上的数据、执行远程服务器上的操作,或者与其他计算机进行交互。 在C语言中,我们可以使用网络编程库来实现访问远程服务。一个常用的网络编程库是Socket库,它提供了一组函数和数据结构,可以方便地创建和管理网络连接。 首先,我们需要创建一个网络套接字 (socket),它可以是客户端套接字或服务器套接字。然后,我们可以使用套接字函数来与远程服务器进行通信。例如,可以使用connect函数来连接到远程服务器,使用send和recv函数来发送和接收数据。 在访问远程服务时,我们需要注意一些安全问题。例如,确保输入的数据是合法的,并对传输的数据进行加密,以防止数据泄漏或被非法篡改。 除了Socket库外,还有其他的网络编程库可供选择,如Winsock和libcurl。它们提供了更高级的接口和功能,可以更方便地实现访问远程服务。 总之,通过C语言编写的代码可以实现访问远程服务。我们可以使用网络编程库来创建和管理网络连接,并利用这些连接与远程服务器进行通信。这为我们的应用程序带来了更多的功能和可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值