第一个MICO CORBA demo实录
因为忙于其他事情没有仔细去学习CORBA原理,也就大概根据网上的教程搭了一个使用MICO的demo
记录如下。
这里的话,代码我就不贴了,程序也不详细解释了,因为项目文件夹里有一个PPT详细解释了这个程序的含义,我就把关键的地方说一下,比如说网络环境的配置,程序的结构,Makefile的撰写,MICO的编译安装
编译和安装MICO见这篇随笔
1、环境
Virtual Box + Ubuntu 12.04 LTS , 用来搭建server程序
GNU GCC , 注意Ubuntu默认是不带GNU GCC的,见这篇随笔
Windows 7 , 用来搭建client程序
Microsoft Visual Studio 2013
网络环境:由于手上没有路由器,但是有一个USB无线网卡,所以用手机建立了一个WIFI Hotspot,把USB无线网卡分配给VBOX里的Ubuntu系统使用,然后Windows和Ubuntu都连接到手机建立的WIFI Hotspot中(手机没有打开数据流量),因此2个网卡可以互相PING通了。
这样配置网络环境的原因:首先,我手头没有路由器,没有2台电脑(当然,写成手机应用也可以,不过时间紧就没这个打算),所以只能用虚拟机。其次,用虚拟机如果不进行一些配置的话,只能从虚拟机PING通主机,但是从主机无法PING通虚拟机,这是因为虚拟机网络配置一般是采用的NAT,你在Ubuntu里使用ifconfig可以查看到eth0(以太网端口0,我用的网线上网)的inet addr(也就是ipv4 addr)是类似于10.0.2.15这样的地址,而主机的inet addr(在windows下叫做IPv4 addr,用ipconfig或者arp -a可以查看)是类似于113.54.xxx.xxx(取决于你所在的地区和网络运营商),所以如果你不进行配置来解决这个问题的话,从主机是PING不通虚拟机的,虚拟机可以依靠NAT来PING通主机,但反之不行。当然,配置的方法,网上有一大堆,比如说这篇文章,虽然我很感兴趣,但是我最近时间有限也没去做那么多实验,大家可以试试。所以我就用手头能拿到的东西这样搭了一下网络环境。
怎么测试能不能PING通:上述的网络环境搭建好之后,在Windows下,输入ipconfig查看你在WIFI Hotspot中的ip地址,比如说我得到的结果就是无线局域网适配器 无线网络连接 IPV4地址:192.168.43.2;然后到Ubuntu中,连接好手机建立的WIFI Hotspot,输入ifconfig可以看到,比如我的就是wlan0 inet addr: 192.168.43.167。因此现在就可以在Windows下PING 192.168.43.167或者在Ubuntu中PING 192.168.43.2,不出意外的话是可以PING通的。
2、程序
首先,网络端口
在server.cpp中搜索192.168.43.167:9001,可以看出,这就是server监听的端口,因此,打开client.cpp,可以看出client也是连接的这个端口
然后,Makefile和程序结构
Makefile里面还是写了很多注释的,应该都解释的比较清楚
对于client这边,我只提供了Makefile.win32,也就是拿给Visual Studio NMAKE使用的,对于server那边,我既提供了Makefile.win32也提供了Makefile给GNU MAKE使用
在Windows下,我没有选择把MICO的所有的可执行文件(idl.exe那些)配置到环境变量里面,而是直接拷贝到项目文件夹mico-bin-win32中,因此在写Makefile.win32的时候,就是用的相对路径来调用idl这些MICO的可执行文件
在Ubuntu中,我也采取这种策略(实际上完全没有必要,因为如果你只要用默认的./configure,那么make再make install之后就会安装到/usr/local目录下,idl等程序也就在环境变量之中了,也就不用但既然都这么做了,也就懒得改了,以后做其他东西的时候注意一下就是),其中相关的代码是$(CD) src; $(IDL) Account.idl,至于为什么这两条命令要写到一行里用分号隔开,见这篇文章(并搜索cd /home/hchen; pwd)
另外,对于server这边,在Ubuntu下编译的时候,Makefile中有2个选项-lpthread还有-lssl,也就是说MICO依赖于这两个库(别问我怎么发现的,一堆undefined reference再google一下就知道了),posix thread库在Ubuntu下是默认自带的,但是ssl库不是,需要安装,见这篇随笔
3、编译运行
Ubuntu中,输入make即可编译server,可执行文件为bin/micoserver。Windows下,打开VS2013 开发人员命令提示,切换到client的目录,输入nmake /f Makefile.win32即可编译client,可执行文件为bin\micoclient.exe(server在Windows下也是可以编译的,就跟编译client的方法一样)
根据前面的网络配置,可知server这边的IP地址是192.168.43.167,client这边的IP地址是192.168.43.2
首先在Ubuntu中,运行nsd -ORBIIOPAddr inet:192.168.43.167:9001,注意如果你没有把MICO安装到/usr/local,那么你就必须找到nsd的相对路径来执行nsd程序
然后打开另一个命令行窗口,运行编译好的bin/micoserver
回到Windows,运行micoclient.exe即可
运行截图如下
_______________________________________________________
我遇到的问题就是如果把server放到虚拟机里,client放到主机里,client始终访问不到虚拟机,一会就挂了。但是反过来就可以(当然,client和server都在一台机器里就不用说了,肯定也是可以运行的)。等有机会找两台机器试试。




补充:java client的撰写
首先,JDK自带一个idlj.exe,可以用来编译idl,命令是:idlj -fclient FILE_NAME.idl
参数-fclient代表只生成client需要的接口和类文件,-fserver是生成server那边需要的接口和类文件,-fall就是同时生成client和server需要的接口和类文件
这里我们只需要client这边的文件
编译idl文件之后,会生成几个java文件,添加到你的java项目中,我是用eclipse作为IDE
有两个package,一个是client,另一个是idl
client/Client.java
idl/xxxxxx.java // 这些都是idlj命令产生的文件
其次,在eclipse下如果你遇到了Access restriction: The type * is not accessible due to restrict报错问题,参考这篇文章(我尝试了第一种解决办法,可行)
java代码我参考的这篇文章
但是有问题,总是不按我设置的参数和端口访问服务器,解决办法见这个帖子
最后我还是在本机上运行的nsd.exe+micoserver.exe来开启server,IP和PORT还是与上面c++demo的一样,但是java这边运行的时候报错
org.omg.CORBA.OBJECT_NOT_EXIST: vmcid: 0x0 minor code: 0 completed: No
目前暂时无解,到时候解决了再来记录一下吧
第一个MICO CORBA demo实录的更多相关文章
- 我的第一个 react redux demo
最近学习react redux,先前看过了几本书和一些博客之类的,感觉还不错,比如<深入浅出react和redux>,<React全栈++Redux+Flux+webpack+Bab ...
- 1.类的加载机制_继承类的加载(一个小的Demo)说明
今天我们先来一个小的Demo来了解类的加载顺序. public class ClassLoaderTest { public static void main(String[] args) { Sys ...
- 第一个ajax小demo
第一个ajax小demo 文章来源:http://blog.csdn.net/magi1201/article/details/44569657
- opencv安装实录附十几行C++实现的一个人脸识别demo
前言: 之前写过一篇在nano上使用opencv,nano上默认是安装了opencv的库,除了nano,我们自己电脑上也想使用opencv做一些平时图像处理验证. 本来也是看一些资料安装好的,觉得也没 ...
- 无废话WCF入门教程六[一个简单的Demo]
一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...
- 一起来花5分钟写一个PHP入门Demo
最近公司招了几个应届毕业生,他们对前端的了解还挺多,但是对后端的技术一无所知,我觉得,作为一个前端攻城狮,如果你有远大的抱负,就应该雨露均沾... 今天我就跟大家讲一讲PHP最基本的入门,至少别人问起 ...
- 使用angular.js开发的一个简易todo demo
前沿 在CVTE实习考察的一周里,接触到了angular,并在最后的一天任务里要求使用angular做一个功能主要包括创建.编辑.恢复.删除以及留言的todo demo,并支持响应式布局.因为之前没怎 ...
- 他的第一个NDK的Demo
DEMO下载链接: http://download.csdn.net/detail/logicsboy/7535409 首先给你们恶补下啥是NDK:(我从百度Copy的) NDK全称:Native D ...
- [小北De编程手记] Lesson 01 - AutoFramework构建 之 从一个简单的Demo聊起
写在最前面 这个系列的主旨是要跟大家分享一下关于自动化测试框架的构建的一些心得.这几年,做了一些自动化测试框架以及团队的构建的工作.过程中遇到了很多这样的同学,他们在学习了某一门语言和一些自动化测试的 ...
随机推荐
- 利用PMKID破解PSK的实际测试与影响评估
在2018年8月4日,一位研究员在hashcat论坛中发布了一篇帖子,表示他研究WPA3协议密码破解方法的过程中,发现了一个针对WPA/WPA2协议密码破解的新方法,使用PMKID(the Pairw ...
- 【日志处理】logstash性能优化配置
2W条数据用时4秒完成,每秒5000条左右,昨天是同时写入到文件和标准输出,看起来是output的问题,这块性能应当可以满足性能要求了 后继我会继续把结果输出到tcp,kafka来测试经过grok后的 ...
- Handler(2)
andriod提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange). 1)Loo ...
- activemq两种实现方式
第一种:点对点 #发布者public class Producer { private static final String userName = ActiveMQXAConnectionFacto ...
- Win7如何更改网络位置,如何加入或创建家庭组
1 打开网络和共享中心,点击连接上网的哪一个网络,点击把公用网络改为家庭网络 2 依次执行下一步 3 如果是加入一个家庭组,则输入家庭组的密码,否则将得到一个家庭组的密码 4 加入成功 ...
- Tomcat的server.xml配置讲解(一)
一.Tomcat虚拟目录的配置 1.服务器配置 默认端口号为8080,如果要想修改端口号,则可以在Tomcat目录中的conf/server.xml文件,找到如下代码,将端口号改为:80:保存serv ...
- IBM-ETP 实训项目前一天
明天就要开始项目了,实训项目,虽然之前做了几个项目,但是明天就要被一个有着8年项目经验的大牛带着做这个项目了.心中还是不免有点兴奋的.希望能学到更多的东西,来充实自己. 自己也搭建了一个小的demo ...
- 【转】Socket状态变迁图
转自:http://www.cnblogs.com/ILove/archive/2008/12/08/1350430.html 服务端,端口的状态变化 先在本机(IP地址为:192.168.1.1 ...
- [Swift A] - HTTP请求
iOS开发中大部分App的网络数据交换是基于HTTP协议的.本文将简单介绍在Swift中使用HTTP进行网络请求的几种方法. 注意:网络请求完成后会获得一个NSData类型的返回数据,如果数据格式为J ...
- UIKit class hierarchy
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3puY2Rtcw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...