两Peer之间如何通过 JxtaBidiPipe相互通信

两Peer之间如何通过 JxtaBidiPipe相互通信

 

 

JxtaBidiPipe是通过巧妙的实现InputPipe和OutputPipe来完成双向通信的。通过JxtaBidiPipe方式进行双向通信,需要用到两个类:JxtaServerPipe和JxtaBidiPipe。实际完成通信任务的是JxtaBidiPipe类。但是双方通信前需要建立起这个连接,因此就用到了JxtaServerPipe类:该类首先站在那里等待连接请求,当有某人要求连接时,双方就开始建立实际的双向连接,也就是JxtaBidiPipe类开始生成并工作了。通信的双方我们暂且把一个称作“服务器端”,另一个称作“客户端”,下面我描述他们的通信过程,你就明白我这样称呼是有道理的。它们的通信过程是:

1、 服务器端先运行,它自然获得了 NetworkManager PeerGroup 等对象。紧接着开始正式工作了: 它首先应获得一个JxtaServerPipe的实例:

JxtaServerPipe serverPipe = new JxtaServerPipe(netPeerGroup, 

                                              pipeAdv );

它的作用是开始等待随时有某个客户端前来要求通信。获得实例时需要两个参数,一个netPeerGroup是服务器 端平台的默认对等组。另一个 pipeAdv 是一个管道通告 PipeAdvertisement 的对象。要注意在客户端也要用到这个相同的通告,这一点同InputPipe、OutputPipe的情况相同。

 

2、 然后调用语句:
JxtaBiDiPipe bi di pipe = serverPipe.accept() ;
这时候服务器端就开始等待客户端的连接请求了。当然,线程也会在此阻塞住。任何时候某客户端发出连接请求被服务器端的这句所接收,则获得了 JxtaBiDiPipe  的对象 bi di pipe  。此时线程自然结束,下面就可以使用这个 JxtaBiDiPipe  进行双向通信了。

3、 在客户端方面,同样,在 JXTA 平台启动后, 自然也获得了 NetworkManager PeerGroup 等对象。这时候开始正式工作了:通过语句
JxtaBiDiPipe   bi di pipe =  new  JxtaBiDiPipe( peergroup ,

                              pipeAdv , 20000,  this true );

开始向服务器端发起连接请求,如第2步所述,服务器端本来已经在那里等待这个请求了。当收到这个请求后,服务器端和这里的客户端就都得到了这个 JxtaBiDiPipe 类的对象了,它们就开始通过这个对象进行双向通信。在说明如何进行双向通信之前,我先解释 一下刚才双方是如何“握手”到一起的:

在第1步中服务器端创建了 JxtaServerPipe 类的对象时有一个参数就是 pipeAdv ,而在客户端申请连接(即本步中创建 JxtaBiDiPipe 的对象   )也有一个参数 pipeAdv ,这就是双方联系的纽带。这是一个管道通告,只要双方通过这个相同的通告来建立连接,那么它们就是可以“走到一起的”。

4、 双方建立了连接后,就可以通过它们所共有的 JxtaBiDiPipe   的对象 bi di pipe  进行通信了。当双方任何谁想要发送消息时,就先将要发送的消息封装成一个Message对象,然后通过语句: bi di pipe  .sendMessage(msg)发送给对方了。

5、 那么双方如何接收消息呢?因为消息是随时可以到来的,所接收一定是异步的了。这里就需要用到“消息监听器”了,具体来说是:

第一、 先将双方的类实现消息监听接口,例如类的声明可以是:

public class JxtaBidiPipeExample implements PipeMsgListener{}

第二、 当然,实现了这个监听接口后,自然就要求你必须实现一个方法了,那就是方法: public   void  pipeMsgEvent(PipeMsgEvent event) { }。任何时候有消息到来时,这个方法就被自动调用。所以,你要如何处理所接收的消息,就在这个方法里处理就可以了。具体来说一般有两步: Message msg = event.getMessage()

MessageElement msgElement = msg.getMessageElement( "MSG" );

最后,通过语句: msgElement .toString() 就得到了消息内容了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值