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

本文转自: http://blog.csdn.net/xhu_eternalcc/article/details/15378061


首先当然需要将远程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里面配置),且任意配置不受影响,代码如下:

[cpp]  view plain  copy
 print ?
  1. //mdsplus_read.c  
  2. #include<mdslib.h>  
  3. #include<mdsshr.h>  
  4. #include<stdio.h>  
  5. #include<string.h>  
  6. #define statusOk(status) ((status)&1)  
  7. int getSize(char*sigName);  
  8. int main(int argc,char** argv){  
  9.     int socket=-1;  
  10.     int status=-1;  
  11.     int shot=90000;  
  12.     char tName[]="eastpower";  
  13.     char ip[]="202.127.204.220:8000";  
  14.     int size=0;  
  15.     socket=MdsConnect(ip);//:8001");  
  16.     if(-1==socket){  
  17.         fprintf(stderr,"Error connecting to mdsip server.\n");  
  18. //      return -1;  
  19.     }  
  20.     status=MdsOpen(tName,&shot);  
  21.     if(!statusOk(status)){  
  22.         fprintf(stderr,"Error opening tree for shot %d:%s.\n",shot,MdsGetMsg(status));  
  23.         return -1;  
  24.     }else{  
  25.         fprintf(stderr,"opening tree for shot %d:%s Successful.\n",shot,MdsGetMsg(status));  
  26.     }//  
  27.     size=getSize("f010_S");  
  28.     printf("size=%d\n",size);  
  29.     if(size<1){  
  30.         fprintf(stderr,"Error retrieving length of signal\n");  
  31.         return -1;  
  32.     }//if  
  33.     return 0;  
  34. }  
  35. int getSize(char*sigName){  
  36.     int dtypelong=DTYPE_LONG;  
  37.     int retSize;  
  38.     int lenDescr;  
  39.     int null=0;  
  40.     int status;  
  41.     int effNum=0;  
  42.     char expression[1024];  
  43.     sprintf(expression,"SIZE(%s)",sigName);  
  44.     lenDescr=descr(&dtypelong,&retSize,&null);  
  45.     status=MdsValue(expression,&lenDescr,&null,&effNum);  
  46.     if(!statusOk(status)){  
  47.         fprintf(stderr,"Error getting the size of %s.\n",sigName);  
  48.         return -1;  
  49.     }//if  
  50.     return retSize;  
  51. }//getSize()  

Makefile如下:

[cpp]  view plain  copy
 print ?
  1. cc=gcc  
  2. mdsplus_read:mdsplus_read.o  
  3.         cc mdsplus_read.o -L/usr/local/mdsplus/lib -lMdsLib -lMdsShr -lc -o mdsplus_read -std=c99  
  4. mdsplus_read.o:mdsplus_read.c  
  5.         cc -c mdsplus_read.c -o mdsplus_read.o -I/usr/local/mdsplus/include -std=c99  

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

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

[cpp]  view plain  copy
 print ?
  1. int main(int argc,char** argv){  
  2.         int status=-1;  
  3.         int shot=90000;  
  4.         char tName[]="eastpower";  
  5.         int size;  
  6.         status=MdsOpen(tName,&shot);  
  7.         if(!statusOk(status)){  
  8.                 fprintf(stderr,"Error opening tree for shot %d:%s.\n",shot,MdsGetMsg(status));  
  9.                 return -1;  
  10.         }else{  
  11.                 fprintf(stderr,"opening tree for shot %d:%s Successful.\n",shot,MdsGetMsg(status));  
  12.         }//  
  13.         size=getSize("f010_S");  
  14.         printf("size=%d\n",size);  
  15.         if(size<1){  
  16.                 fprintf(stderr,"Error retrieving length of signal\n");  
  17.                 return -1;  
  18.         }//if  
  19.         return 0;  
  20. }  


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

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

[cpp]  view plain  copy
 print ?
  1. //mdsplus_c++_sample2.cpp  
  2. #include<mdsobjects.h>  
  3. #include<cstdlib>  
  4. #include<iostream>  
  5. #include<string>  
  6. inline char * convert(const std::string & str){  
  7.         return const_cast<char *> (str.c_str());  
  8. }  
  9. int main(int argc,char** argv){  
  10.         std::string  treeName("eastpower");  
  11.         std::string nodeName("F010_S");  
  12.         try{  
  13.                 MDSplus::Connection *conn = new MDSplus::Connection(convert("202.127.204.220"));  
  14.                 conn->openTree(convert(treeName),9000);  
  15.                 conn->closeTree(convert(treeName),9000);  
  16.         }catch(MDSplus::MdsException*exc){  
  17.                 std::cout<<"Error appending segments:"<<exc->what()<<std::endl;;  
  18.         }  
  19.         return EXIT_SUCCESS;  
  20. }  

Makefile如下:

[cpp]  view plain  copy
 print ?
  1. cc=g++  
  2. mdsplus_c++_sample2:mdsplus_c++_sample2.o  
  3.         $(cc) mdsplus_c++_sample2.o -o mdsplus_c++_sample2 -L/usr/local/mdsplus/lib -lMdsObjectsCppShr  
  4. mdsplus_c++_sample2.o:mdsplus_c++_sample2.cpp  
  5.         $(cc) mdsplus_c++_sample2.cpp -c -o mdsplus_c++_sample2.o -I/usr/local/mdsplus/include -g  

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

[cpp]  view plain  copy
 print ?
  1. //mdsplus_c++_sample2.cpp  
  2. #include<mdsobjects.h>  
  3. #include<cstdlib>  
  4. #include<iostream>  
  5. #include<string>  
  6. inline char * convert(const std::string & str){  
  7.         return const_cast<char *> (str.c_str());  
  8. }  
  9. int main(int argc,char** argv){  
  10.         std::string  treeName("eastpower");  
  11.         std::string nodeName("F010_S");  
  12.         try{  
  13.                 MDSplus::Tree * t= new MDSplus::Tree(convert(treeName),90000,convert("edit"));  
  14.                 MDSplus::TreeNode * node=t->getNode(convert(nodeName));  
  15.                 t->quit();  
  16.         }catch(MDSplus::MdsException*exc){  
  17.                 std::cout<<"Error appending segments:"<<exc->what()<<std::endl;;  
  18.         }  
  19.         return EXIT_SUCCESS;  
  20. }  


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



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值