java中的jgroup_JGroups实现聊天小程序

本文实例为大家分享了JGroups实现聊天小程序的具体代码,供大家参考,具体内容如下

效果图:

6589c3e5b37a2c2a0388ffc16d6190f5.png

代码部分:

package com.lei.jgoups;

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.util.LinkedList;

import java.util.List;

import org.jgroups.JChannel;

import org.jgroups.Message;

import org.jgroups.ReceiverAdapter;

import org.jgroups.View;

import org.jgroups.util.Util;

public class SimpleChat extends ReceiverAdapter{

JChannel channel;

String user_name=System.getProperty("user.name", "n/a");

final List state=new LinkedList();

public static void main(String[] args) throws Exception {

new SimpleChat().start();

}

private void start() throws Exception {

channel=new JChannel();// 使用默认的配置, udp.xml【YBXIANG:】该文件位于jgroups-x.y.z.Final.jar中。

channel.setReceiver(this);//注册一个 Receiver 来接收消息并查看变化

channel.connect("ChatCluster");

channel.getState(null, 10000);

eventLoop();

channel.close();

}

private void eventLoop() {

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

while(true) {

try {

System.out.print(">");

System.out.flush();

String line=in.readLine().toLowerCase();

if(line.startsWith("quit") || line.startsWith("exit"))

break;

line="[" + user_name + "] " + line;

Message msg=new Message(null, line);

channel.send(msg);

}

catch(Exception e) {

}

}

}

//如果有节点加入后会回调此函数

public void viewAccepted(View new_view) {

System.out.println("** view: " + new_view);

}

//接收到消息后会调用此函数

public void receive(Message msg) {

String line=msg.getSrc() + ": " + msg.getObject();

System.out.println(line);

synchronized(state) {//同步调用

state.add(line);

}

}

//getState回调方法

public void getState(OutputStream output) throws Exception {

synchronized(state) {

Util.objectToStream(state, new DataOutputStream(output));

}

}

// 从input stream中读取状态,然后做相应的设置:

public void setState(InputStream input) throws Exception {

List list;

list=(List)Util.objectFromStream(new DataInputStream(input));

synchronized(state) {

state.clear();

state.addAll(list);

}

System.out.println(list.size() + " messages in chat history):");

for(String str: list) {

System.out.println(str);

}

}

}

架包:

bf2bb0ef4507233d204001659e1ee776.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows Embedded CE 6.0开发初体验(五)构建CE平台

接下来的一节会有非常多的图,因为我们要在Visual Studio 2005里创建一个CE 6.0的平台(Platform)了。创建CE平台的方法和创建普通工程的方法类似。在完成了Platform Builder之后,我们打开Visual Studio 2005后,选择File…

est.java 2 错误 找不到符号_找不到Cython/Python符号PyString\u Typ

我试图调用Cython的C代码,并遵循official guide。在但是,当在python中导入已编译的模块时,我得到以下错误。在---------------------------------------------------------------------------ImportError Traceback (most recent call last)i…

一步一步学Silverlight 2系列(31):图形图像综合实例—实现水中倒影效果

概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlig…

Windows Embedded CE 6.0开发初体验(六)平台定制

Windows CE是一个组件化的操作系统,我们可以根据不同的环境设置不同的组件来组合成有针对性的平台,而一个功能往往需要多个组件才能够实现。Catalog就是实现某个功能的组件集合,每个Catalog Item会包含一个或多个组件,而Catalog I…

java lambda 循环list_Java8--Lambda表达式对List集合操作(一)

一、利用stream().forEach()遍历集合List list new ArrayList();list.add("djk");list.add("djk1");list.add("djk12");list.add("djk123");//利用stream().forEach()遍历集合list.stream().forEach(item->{System.out.print(item…

【转】Win32 SDK 实现带图片的 Button 控件BM_SETIMAGE(Disable时图片不显示)

在编写对话框程序时,希望能在按钮控件里显示一个小插图,如图所示 最初使用的方法是使用 BM_SETIMAGE 消息,但却不能达到满意的效果,在网上查了一通资料,最后终于实现了,现在把实现的方法记下来。 首先来到MSDN上&…

解读设计模式----命令模式(Command Pattern)

***本文与作者原文有一定的偏差,其中加入了一部分是个人看法,详细请查看作者原文。***原文连接http://www.dofactory.com/Patterns/PatternCommand.aspx命令模式意图:  GOF 在《设计模式》一书中阐述其意图:“将一个请求封装为一个对象,从而…

Windows Embedded CE 6.0开发初体验(七)编译和调试平台

在完成Catalog选择之后,平台定制的工作告一段落,接下来,我们就要进入变数最多的环节——“编译和调试”平台了。编译的操作简单,但是想通过编译却有很多变数。 编译平台的第一步是选择Debug或者Release版本。选择 Build菜单中的C…

python合并单元格 索引_python笔记:纵向合并表格

工作中我们常常遇到多个格式相同的表格面要合并成一个表格,比如将2019年的数据与2020年的数据合并在一起来进行分析。平时EXCEL时我们通常直接复制粘贴,但有时因表格内容过大,直接粘贴效率低,且当字段过多时还需要进行逐列粘取我们…

哈希表(HashTable)探究(转)

HashTable 通常称为哈希表,它表示键(key)/值(value)对的集合。 1、HashTable 的构造函数: HashTable() //初始化为0个元素的空实例 HashTable(Int32) //初始化为int32 个元素的…

【转】Win32子窗口控件(按钮、编辑框、静态框、滚动条等)!!

前言: 子窗口控件是特殊的子窗口,不需要我们注册窗口类,系统已经注册好了,我们只需要在创建时选择相应的窗口类名。常用的子窗口控件有按钮BUTTON、组合框COMBOBOX、编辑框EDIT、列表框LISTBOX、静态框STATIC、滚动条SCROLLBAR等类…

在PC上用模拟器搭建Windows Mobile仿真环境:Microsoft Device Emulator使用

因为工作需要,体验了一下微软的移动设备模拟器Device Emulator 3.0。在此把一些使用体验写出来和大家交流一下,在自己摸索过程中从网上找了很多资料参考,希望大家再做这个的时候少走一些弯路%^) 在PC上用模拟器搭建Windows Mobile仿真环境&am…

人生需要奋斗

看了几集电视剧 奋斗,有种特别的味道!人生需要奋斗,沿着自己的目标,前进。FIGHTING 转载于:https://www.cnblogs.com/gxj760998/archive/2008/04/11/1147725.html

【转】QT布局QGridLayout QHBoxLayout QVBoxLayout简要分析!!

转自:https://blog.csdn.net/sabcdefg/article/details/106693203 在分析之前,先吐槽下M$的MFC,竟然没有相对布局!(至少我不知道,每次都是使用代码控制布局), M$这么多年,也不发展一下,你看C#都有相对布局... 参考精通Qt4编程(第2版),先看看…

php下拉选项登录_php下拉选项的批量操作的实现代码

实现功能&#xff0c;操作项可以单独删除&#xff0c;批量项可以批量删除&#xff0c;批量显示&#xff0c;隐藏(改广告的数据库的status_is的值)&#xff1b;1.视图关键点&#xff1a;<?php echo $row->id?>全选选择操作删除显示隐藏/*单个删除*/2.控制器&#xff…

协议栈开发学习总结

近来一直很少些关于技术方面的文章&#xff0c;一来是被工作和生活所累&#xff0c;没有很多闲暇多余的时间,二来呢是觉得一直没有好的case&#xff0c;或则有好的case&#xff0c;但觉得目前在这个case方面&#xff0c;自己还不算很professional。今天心情不错&#xff0c;感觉…

【转】QGridLayout 详解

转自&#xff1a;https://blog.csdn.net/u013928315/article/details/78123573 一、QGridLayout属性介绍 1、QGridlayout以方格的形式管理窗口部件&#xff0c;先看QGridLayout的属性&#xff0c;如下图 2、各个参数的介绍 layoutLeftMargin ...至layoutBottomMargin在ui_Mai…

php网站评论模块怎么写,模块内容评论循环

一、作用用于循环查询模块评论数据(支持分页查询)二、语法{commentmodule模块名称....}{/comment}三、参数介绍(红色表示必填参数&#xff0c;蓝色表示系统默认参数)参数介绍module用来查询模块的评论&#xff0c;例如新闻模块&#xff0c;填写newssite站点id&#xff0c;默认当…

什么是LINQ?

什么是LINQ? LINQ&#xff0c;语言级集成查询&#xff08;Language INtegrated Query&#xff09;经过了最近 20 年&#xff0c;面向对象编程技术&#xff08; object-oriented (OO) programming technologies &#xff09;在工业领域的应用已经进入了一个稳定的发展阶段。程序…

宋体(Simsun)和新宋体(NSimsun)的区别

我们平常说的宋体&#xff08;Simsun&#xff09;全称为中易宋体&#xff0c;它和新宋体&#xff08;NSimsun&#xff09;是由北京中易中标电子信息技术有限公司制作并持有版权的两个TrueType 字体。自从微软向中易购买了这套字型后&#xff0c;它便成为了简体中文使用者最熟悉…