我正在开发一个分布式应用程序,我需要将基于客户机的Java连接到基于服务器的C++。他们两个都需要互相发送信息,但是我需要他们在等待信息的时候做一些事情,他们不知道什么时候会得到新的信息,或者什么时候发送信息。
我怎样才能做到这一点?现在,我正在尝试实现与Socket的基本通信,但实际上我无法与它们进行通信。我读过使用套接字+线程通常是客户端服务器应用程序的好方法。
你能给我推荐一些网页或书籍来阅读,或者寄给我一些示例代码来学习吗?
你认为我应该使用其他方法吗,比套接字更好?也许是一个更高级别的库( c++和java需要它)还是完全不同的方式?
编辑:
我会补充一些额外的信息。
我希望取得以下成果:
我的C++程序有一个主循环,我希望有一个类似于GetUpdatedDataFromRemoteDevice()的调用,在那里我读取了以前从网络中更新的一些数值变量的新值(例如套接字)。
最终,C++程序将需要向远程设备发送一条消息,告诉他发送其他类型的数据,然后继续获取更新的值。
从Java程序(远程设备)运行的应用程序是一个交互式的可触摸屏幕,不能被网络传输阻塞,因为它必须继续为用户工作,所以所有的网络都应该在一个单独的线程中完成。
该线程应该连接到服务器,当按下按钮时,开始在循环中发送数据(4个更改的数值),直到另一个事件发生为止。
如果能轻松地重新连接到服务器,那就太好了。
发布于 2012-02-05 21:09:42
我不知道您的应用程序是什么,但是健壮的客户端服务器套接字编程很难正确完成。硬件字节顺序、字符串编码、网络错误、重试、重复消息、ack等。需要很多好的设计和仔细的编程。在考虑使用多个线程之前,您需要让它像单线程一样正常工作。
除非您需要从服务器到客户端的即时通知,否则我建议您使用HTTP作为客户端和服务器之间的协议。客户端可以偶尔轮询服务器上的新消息。
无论如何,这个问题已经解决了好几次了。
http://activemq.apache.org/
http://www.rabbitmq.com/devtools.html
http://www.cs.wustl.edu/~schmidt/ACE-overview.html
发布于 2012-02-05 23:52:43
冰是一个用于分布式应用程序的现代和良好的库:
首先,定义要在服务器和客户端之间交换的消息。
然后,实现C++和Java源代码来处理这些消息。
更多信息请访问http://zeroc.com/ice.html
玩得开心;-)
编辑:--我必须在一些项目中使用王牌。我可以看出ACE很古老,可能很成熟,但是使用过时的C++编码规则:-(因此ACE不像STL或BOOST那样容易使用。而且ACE不是很有效率..。我更喜欢ICE ;-)
发布于 2012-02-05 21:14:46
我曾经做过这样的事。在我的例子中,使用JNI将我的C++应用程序连接到本地Java应用程序比较容易,然后让这两个Java应用程序互相交谈。
https://stackoverflow.com/questions/9152896
复制相似问题