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…

一步一步学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…

【转】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时我们通常直接复制粘贴,但有时因表格内容过大,直接粘贴效率低,且当字段过多时还需要进行逐列粘取我们…

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

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

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

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

【转】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…

java import 出错,Eclipse的java代码出错:The import XXXX cannot be resolved

折腾Eclipse时&#xff0c;经常会遇到这种情况&#xff1a;缺少某个库&#xff0c;找到之后&#xff0c;需要将该库&#xff0c;jar包&#xff0c;加入到当前项目&#xff0c;使得代码中的import xxx得以正常导入。【如何在Eclipse中导入/添加(外部的)库/jar包】基本思路&#…

WCF从理论到实践(14):WCF解决方案模板 (转)

WCF从理论到实践(14):WCF解决方案模板 正所谓磨刀不误砍柴工,虽然VS2008为我们提供了WCFServiceLibrary项目模板,但在实际开发的时候,我们通常更喜欢按照自己的方式来建立WCF项目,通常情况下,我们将服务契约(通常是接口)数据契约,消息契约等契约单独作为一个项目,而将服务的实现…

thinkphp index.php隐藏,thinkphp5怎么隐藏index.php入口文件?

隐藏方法&#xff1a;1、打开apache的http.conf配置文件&#xff0c;开启mod_rewrite.so模块&#xff1b;2、AllowOverride None项中将None改为All&#xff1b;3、修改“.htaccess”的配置内容&#xff0c;将原代码替换为官方手册提供的代码。thinkphp现在的php主流框架之一&am…

【转】extern “C“和__declspec(dllexport)以及__declspec(dllimport) 和def的简单解析

转自&#xff1a;https://blog.csdn.net/xupan_jsj/article/details/9028759 前面的extern "C" __declspec(dllexport) __declspec(dllimport)都是用于函数或者变量&#xff0c;甚至类的声明的&#xff08;可以把extern "C"放在class的前面&#xff0c;…

【转】extern “C“以及__declspec(dllexport) 讲解和def文件dll导出方法

转自&#xff1a;https://blog.csdn.net/qing666888/article/details/41135245 一&#xff0c;__ declspec&#xff08;dllexport&#xff09;&#xff1a; 将一个函数声名为导出函数&#xff0c;就是说这个函数要被其他程序调用&#xff0c;即作为DLL的一个对外函数接口。通常…

【转】DICOM医学图像处理:浅析SWF、MWL、SPS、MPPS

转自&#xff1a;https://blog.csdn.net/zssureqh/article/details/40151107 背景&#xff1a; 最近重新花时间阅读了DICOM标准&#xff0c;顺带着看了一下HL7标准和IHE&#xff0c;对标题中提到的SWF、MWL、SPS和MPPS有了更进一步的认识&#xff0c;现将自己的理解整理出来&a…

Php点击更换封面,JavaScript_js实现点击图片改变页面背景图的方法,本文实例讲述了js实现点击图 - phpStudy...

js实现点击图片改变页面背景图的方法本文实例讲述了js实现点击图片改变页面背景图的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;点击图片即改变页面的背景图片希望本文所述对大家的javascript程序设计有所帮助。相关阅读:C语言编程中统计输入的行数以及单词个数…