JXTA 点对点管道通信
package first;import java.io.IOException;
import java.util.Enumeration;import net.jxta.discovery.DiscoveryService;
import net.jxta.document.Advertisement;
import net.jxta.document.AdvertisementFactory;
import net.jxta.endpoint.Message;
import net.jxta.endpoint.Message.ElementIterator;
import net.jxta.endpoint.MessageElement;
import net.jxta.endpoint.StringMessageElement;
import net.jxta.id.IDFactory;
import net.jxta.peergroup.PeerGroup;
import net.jxta.pipe.InputPipe;
import net.jxta.pipe.OutputPipe;
import net.jxta.pipe.PipeService;
import net.jxta.platform.NetworkConfigurator;
import net.jxta.platform.NetworkManager;
import net.jxta.platform.NetworkManager.ConfigMode;
import net.jxta.protocol.PipeAdvertisement;public class Chat {private NetworkManager networkManager = null;// 配置private PeerGroup netWorkPeerGroup = null;// 对等组private DiscoveryService discoveryService = null;// 发现服务private PipeService pipeService = null;// 管道服务private InputPipe inputPipe = null;// 输入管道private OutputPipe outputPipe = null;// 输出管道Enumeration<Advertisement> enumeration = null;// 初始化配置public void init(String name) {try {// 相当于jxta的配置,如果不写的话会出现配置页面,手动配置也可networkManager = new NetworkManager(ConfigMode.ADHOC, name);// 在一台pc测试的时候,端口号不能一致,这里修改下端口号NetworkConfigurator configurator = networkManager.getConfigurator();configurator.setTcpPort(9703);configurator.save();// 启动创建对等组// netWorkPeerGroup=new NetPeerGroupFactory().getInterface();netWorkPeerGroup = networkManager.startNetwork();// 初始化discoveryService和pipeServicediscoveryService = netWorkPeerGroup.getDiscoveryService();pipeService = netWorkPeerGroup.getPipeService();} catch (Exception e) {e.printStackTrace();}}// 创建一个管道通告public PipeAdvertisement createPipeAdvertisement(String name) {PipeAdvertisement advertisement = (PipeAdvertisement) AdvertisementFactory.newAdvertisement(PipeAdvertisement.getAdvertisementType());advertisement.setPipeID(IDFactory.newPipeID(netWorkPeerGroup.getPeerGroupID()));advertisement.setName(name);advertisement.setType(PipeService.UnicastType);return advertisement;}// 发布通告public void publish(PipeAdvertisement advertisement) {try {discoveryService.publish(advertisement);discoveryService.remotePublish(advertisement);} catch (IOException e) {e.printStackTrace();}}// 初始化管道public void initPipe(String name) {// 管道通告,相当于名片PipeAdvertisement advertisement = createPipeAdvertisement(name);// 发布 告诉别人我是谁publish(advertisement);try {// 初始化管道inputPipe = pipeService.createInputPipe(advertisement);// 输入通道} catch (IOException e) {e.printStackTrace();}}// 找你想聊的人public PipeAdvertisement discover(String name) {int count = 3;// 担心一次连不上while (count-- > 0) {try {// 先从本地缓存里头找enumeration = discoveryService.getLocalAdvertisements(DiscoveryService.ADV, "Name", name);if (enumeration != null && enumeration.hasMoreElements()) {PipeAdvertisement pipeAdvertisement = (PipeAdvertisement) enumeration.nextElement();return pipeAdvertisement;}discoveryService.getRemoteAdvertisements(null,DiscoveryService.ADV, "Name", name, 1, null);} catch (IOException e) {e.printStackTrace();}}return null;}// 发送信息public void sendMessage(String name, String msg) {try {outputPipe = pipeService.createOutputPipe(discover(name), 0);// 发送的信息Message message = new Message();StringMessageElement string = new StringMessageElement("data", msg,null);message.addMessageElement(string);outputPipe.send(message);} catch (IOException e) {e.printStackTrace();}}// 接收消息public void receiveMessage() {while (true) {try {// 接收Message message = inputPipe.waitForMessage();// 解析获取到的信息ElementIterator messageElements = message.getMessageElements();if (messageElements != null) {while (messageElements.hasNext()) {MessageElement next = messageElements.next();System.out.println("接收到消息:" + next.toString());}}} catch (InterruptedException e) {e.printStackTrace();}}}public void stop() {// 停止服务networkManager.stopNetwork();}public void start() {init("peer1");initPipe("peer1");discover("peer2");sendMessage("peer2", "hello!!!!");}public static void main(String[] args) {Chat chat = new Chat();chat.start();}
}
JXTA 点对点管道通信相关推荐
- php proc open 返回,PHP用proc_open新建子进程使用管道通信非阻塞执行PHP脚本
PHP用proc_open新建子进程使用管道通信非阻塞执行PHP脚本. 脚本结束时register_shutdown_function回调函数访问管道获取子进程输出的数据. 例子1(popen): f ...
- php管道邮件,php进程通信-PIPE管道通信
上一篇文章讲到了php进程通信的进程信号通信方法,本文介绍的是有名管道: 管道通信,主要是利用文件,写入以及读取来进行通信的, 通俗来讲,就是A进程在1.txt写入1,B进程读取1.txt,就能读取到 ...
- 2.1.4 进程之间的通信(共享通信、消息传递、管道通信)
文章目录 0.思维导图 1.什么是进程通信? 2.共享存储 3.管道通信 4.消息传递 0.思维导图 1.什么是进程通信? 图中我们可以知道什么是进程通信,以及进程通信的低级和高级方式: 我们还可以知 ...
- CreatePipe匿名管道通信
管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机.一个进程在向管道写入数据后,另一进程就可以从管道的另一端将其读取出来.匿名管道(An ...
- C++管道通信类封装
简单的介绍一下,管道通信类 指的是 IPC通信中的一种,即两个不同的进程之间的通信 现在实现一下管道通信类,方便以后调用使用 头文件(引用相关的库) // stdafx.h : 标准系统包含文件的包含 ...
- linux管道通信题目,操作系统实训(Linux)——习题解答、例题解析、实验指导-王红-实验实验7软中断及管道通信课案.ppt...
操作系统实训(Linux)--习题解答.例题解析.实验指导-王红-实验实验7软中断及管道通信课案.ppt 实验7 软中断及管道通信 一.实验目的(1)掌握linux系统软中断通信的实现方法.(2)掌握 ...
- linux 进程和线程或线程和线程之间通过管道通信(pipe)
linux 进程和线程或线程和线程之间通过管道通信(pipe) 转自:http://blog.csdn.net/robertkun/article/details/8095331 线程间通信: [cp ...
- 实验四:《操作系统》之管道通信
Part4. 管道通信 往期回顾: Part0. 实验环境 Part1-1.熟悉UKylin环境 Part1-2.熟悉UKylin环境 Part2.进程控制 Part3.进程通信 一.实验目的 1.了 ...
- 种基于局域网的点对点语音通信
引 言 随着计算机网络的日益普及,人们通过网络进行交流显得越来越重要,于是出现了一系列语音通信的软件,比如NetMeeting.IPPhone.MediaRing以及VoxPhone等等,但这些软件都 ...
最新文章
- linux安装mysql5.6.26_linux mysql-5.6.26 安装
- 220V电容启动交流电机
- UA MATH523A 实分析3 积分理论 概念与定理整理
- 时域和频域的麦克斯韦方程组
- [Python Study Notes]正则表达式
- zsh关于.zprofile .zlogin .zshrc .zshenv文件中环境变量的加载
- [专栏精选]Unity动画系统的RootMotion
- 借势新基建,如何在智能基础设施布一盘大局?
- python面试之腾讯测试开发工程师
- android 清理 app,最好用的五大手机清理APP
- 关于数据库中存储密码的加密
- canvas实现矩形框,用来进行图片框选
- 曾国藩读书的十二条规矩
- Java实战项目《瑞吉外卖》
- Deployer 部署项目
- hosts文件修改后域名无法访问
- debug - UITextField 输入完跳入下一field,按钮变化
- 顾盼华发鸿蒙怦然而梦是什么意思,最美的承诺情话
- Oracle的emp表的基本函数学习
- 杨校老师课堂之Maven下载与配置阿里云镜像
热门文章
- 【分布式】CAP原则和BASE理论
- 电脑的屡次黑屏原因为:CPU中央处理器利用率达到了100%并持续了多秒从而导致
- 8位有符号类型的数值范围是-128~127,why -128?
- Web 开发与搜索引擎优化,你应该选择哪一个?
- 一次 WIN7X64无法定位序数“3906”于动态链接库LIBEAY32.dll处理记录
- 关于vs2022 C6031 “scanf返回值被忽略”的解决办法
- ks(洛伦兹曲线)指标理解
- java修改图片rgb_java图片色阶调整和亮度调整代码示例
- 克隆系统怎么保护服务器,克隆系统引起MSDTC服务工作不正常
- 从云服务器 SSRF 漏洞到接管你的阿里云控制台