`
孙瑞鸿
  • 浏览: 17884 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

可视化通信服务器

 
阅读更多
可视化通信服务器
承接上次的内容,解决上次的遗留问题
1.我们要实现多线程(一个线程一个Socket对象,从而实现多个客户端可同时与服务器建立连接)
while(true){	
		try {
				Socket client = ss.accept();
				System.out.println("已连接");
				s=new Send(client,jf);
				s.start();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

2.服务器可视化
        简单地说我们在服务器窗体上添加两个文本框,一个用于显示接收到的消息,一个用于编辑要发送
的消息,有发送按钮,端口按钮,用于显示用户的列表等。这些都比较简单,我重点说一下用户列表
 
 
//在窗体西边添加面板
  		jp_west=new JPanel();
		this.add(jp_west,BorderLayout.WEST);
		//实例化一个JTable对象,并设置它的模式
		table_user=new JTable();
		//ClientList.getAllThread()取得在线用户链表,以链表形式返回
		List<Send> sts=ClientList.getAllThread();
		//创建UserTableMode类继承TableMode接口,实现接口中的方法即可
		UserTableMode utm=new UserTableMode(sts);
		table_user.setModel(utm);
		//给JTable对象加滚动条
		JScrollPane jsp=new JScrollPane(table_user);
		jsp.setAutoscrolls(true);
		table_user.setPreferredScrollableViewportSize(new Dimension(150,300));
		jp_west.add(jsp);
		//给表格加弹出菜单(实现)
		JPopupMenu pop=this.getTablePopup();
		table_user.setComponentPopupMenu(pop);
 
3.凭借用户名密码登陆
      当服务器和客户端连接成功以后,服务器向客户端发送消息"欢迎您来到瑞鸿聊天室!请输入用户名:",
客户端将用户名写入,服务器向客户端发送消息userName+",请输入您的密码:",在客户端输入密码后,
实例化用户对象,设置用户名、密码等属性;然后对用户名进行认证,认证成功后,将该用户所在线程加入到
在线用户链表。
 
 public void receive(Socket client){
		try {
			InputStream is=client.getInputStream();
			InputStreamReader inr=new InputStreamReader(is);
			BufferedReader bin=new BufferedReader(inr);
			this.sendMessage("欢迎您来到瑞鸿聊天室!请输入用户名:");
			String userName=bin.readLine();
			this.sendMessage(userName+",请输入您的密码:");
			String password=bin.readLine();
			user=new User();
			user.setUserName(userName);
			user.setPassword(password);
			//取得用户登录状态(true/false)
			boolean loginstate=Check.checkLogin(user);
			if(!loginstate)
				this.sendMessage("认证失败!");
			//认证正确后将该用户所在的线程加入到用户在线链表
			ClientList.addClient(this);
			st = bin.readLine();
			while(true){
				ClientList.CastMessage(this.user, st);
				//将cmd上的内容打印到窗体上
				db.text1.append(this.user.getUserName()+" : "+st+"\r\n");
				//读取一个文本行
				st = bin.readLine();
			}
		} catch (IOException e) {
			e.printStackTrace();
			closeMe();
		}
	}
	//关闭这个线程处理对象
		public void closeMe(){
			try {
				client.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

4.ClientList中的一些比较好玩的方法
/**
	 *将该线程加入到在线用户链表
	 */
	public static void addClient(Send s){
		list.add(s);
		CastMessage(s.getUser()," 上线了!在线人数:"+list.size()+"\r\n");
		SwingUtilities.updateComponentTreeUI(DrawBorder.table_user);
	}
  	//群发消息msg为消息的内容
	public  static void CastMessage(User user,String msg){
		msg=user.getUserName()+msg;
		for(int i=0;i<list.size();i++){
			Send s=list.get(i);
			s.sendMessage(msg);
		}
	}
  	//移除所有
	public static void removeAll(){
		for(int i=0;i<list.size();i++){
			Send s=list.get(i);
			s.sendMessage("系统即将关闭!");
			s.closeMe();
			list.remove(i);
			s=null;
		}
	}
  	public static void removeOne(User user){
		for(int i=0;i<list.size();i++){
			Send s=list.get(i);
			if(s.getUser().getUserName().equals(user.getUserName())){
				list.remove(i);
				s.closeMe();
				s=null;
				CastMessage(user,"我下线了!");
			}
		}
	}
  	/**
	 * 根据索引移除指定位置的处理线程对象,界面踢人是调用
	 * @param index:索引
	 */
	public static void removeUser(int index){
		list.remove(index).closeMe();
	}
  	/**
	 * 给队列中的某个用户发送消息
	 * @param index
	 * @param msg
	 */
	public static void sendmessage2(int index,String msg){
		list.get(index).sendMessage(msg);
	}

5.认证用户名
public class Check {
		private static Map<String,User> UserDB=new HashMap(); 
		static{//先于任何方法前执行,相当于注册
			User user=new User();
			user.setUserName("孙瑞鸿");
			user.setPassword("123456");
			UserDB.put(user.getUserName(), user);
		}
		//判断登录状态
		public static boolean checkLogin(User user){
			if(UserDB.containsKey(user.getUserName())){
				return true;	
			}
			return false;
		} 
	} 

小结:对于优化的服务器我认为应该有这几个类:DrawBorder(窗体类)、DrawListener(按钮监听器)、 Send(线程类)、Check(认证检查类)、User(用户信息类)、UserTableMode(在线用户链表模式类)、Client(用户链表类)等。
具体思路: 
1.给窗体上的按钮加监听器
2.触发相应的事件,启动按钮:启动线程
                                    发送按钮:发送消息时点击(调用send方法)
3.线程启动后,即可接收消息(调用receive方法,如上)
我觉得以上即为可视化服务器的主体,其余的一些类/方法,是为了优化服务器而定义的,可以参
考一下 。这样一个可视化的服务器就已经实现好了,动手试一下吧!
 
 
分享到:
评论

相关推荐

    服务器请求可视化工具

    服务器请求可视化工具是一种高效且直观的软件应用,它专门设计用于帮助用户监控和理解服务器接收的各种请求。在IT行业中,这种工具对于系统管理员、开发者以及性能优化专家来说是至关重要的,因为它提供了对服务器...

    网络即时通信,界面可视化

    可视化的MFC的CS模式的程序,服务器端,C源码。

    cosesys 可视化教程

    1. **简化通信:** 由于CoDeSys的集成可视化功能无需使用标识符表格,它能够直接访问控制器中的变量,从而简化了通信流程。 2. **减少工程投入:** 集成可视化省去了通常复杂的OPC(OLE for Process Control)层或DDE...

    一款可视化的远程登陆工具

    在实际应用中,这款可视化的远程登录工具可以广泛应用于各种场景,如数据中心的远程管理、远程协助、云服务器运维等。无论是个人用户还是企业,都可以通过它提高工作效率,减少物理出行,实现远程工作的无缝对接。 ...

    可视化的Scrapy爬虫管理平台

    3. **项目结构**:这个可视化平台可能包含一个后端服务器,负责处理用户请求,与数据库交互,以及与Scrapy进程通信;一个前端应用,提供用户界面;以及可能的一个数据库,用于存储爬虫配置、日志和其他相关信息。 4...

    HTML+CSS+JS数据可视化大屏平台模板实例27-智慧机房监测通用模板

    例如,它可以与后端服务器通信,获取最新的机房环境数据,如温度、湿度、电力消耗等,并利用库如D3.js、ECharts或Highcharts等创建动态图表,实时展示这些数据的变化。同时,JavaScript还可以实现用户交互,如点击...

    redis可视化工具

    而`redis-desktop-manager`是一个专为Redis设计的可视化管理工具,它为开发者提供了在图形用户界面(GUI)中操作Redis数据库的便利。这个工具使得管理Redis数据库变得直观且易于上手,尤其对于初学者和需要频繁进行...

    Hbase 可视化客户端工具(非phoenix连接)

    本文将详细介绍一个专为HBase设计的可视化客户端工具,该工具不依赖于Phoenix连接,而是直接与HBase服务器通信,支持Hbase 1.x版本,提供类似于PL/SQL的友好界面,使得数据管理和查询变得更加便捷。 首先,这个可视...

    ipmi windows可视化管理工具

    Windows上的IPMI可视化管理工具是针对这种需求而设计的,提供了图形化的用户界面,使得管理远程服务器变得更加直观和便捷。 【IPMI基础】 IPMI由一个名为BMC(Baseboard Management Controller)的特殊微控制器实现...

    爬取51job数据并做可视化分析(可视化大屏项目)

    该项目是关于利用Python进行网络爬虫,从51job网站获取相关数据,然后通过Echarts进行数据可视化,并最终构建一个基于Web的可视化大屏展示。在这个过程中,涉及到的关键技术包括Python爬虫、数据库管理(MySQL)、...

    数据可视化大屏-前后端数据交互

    在这个专题中,“数据可视化大屏-前后端数据交互”指的是在构建可视化大屏时,前端与后端如何有效地进行数据通信以实现动态展示和实时更新。 **一、前端数据可视化** 前端是用户与应用交互的界面,对于数据可视化...

    Windows性能Web可视化监控.rar

    "Windows性能Web可视化监控"工具就是为此目的设计的,它提供了一个直观的Web界面,使得用户可以远程监控和分析系统的各种性能指标。下面将详细介绍这个工具及其相关知识点。 首先,Windows性能数据的采集是通过...

    基于Vue与JavaScript的数据大屏可视化编辑器设计与实现

    在大屏可视化中,通常需要从服务器获取大量数据,使用JavaScript进行数据清洗、预处理和转换,以便适应各种图表库的需求。例如,使用JavaScript的Array和Object方法处理数据结构,或者使用lodash等工具库来简化数据...

    js数据可视化驾驶舱20套源码

    在数据可视化中,JavaScript用于处理用户交互,动态更新图表,以及与服务器进行异步数据通信。 3. **前端框架**:这些源码可能使用了不同的前端框架,如React、Vue或Angular,它们简化了UI组件的构建,使开发者能够...

    java网络编程socket可视化

    在本项目"java网络编程socket可视化"中,我们将探讨如何使用Java Socket API创建一个简单的服务器,以及与其交互的客户端应用,同时实现数据的可视化展示。 首先,我们需要理解Socket的工作原理。Socket是网络上的...

    Python课程设计,使用emqx作为mqtt服务器,esp82666为下位,pyq5为机界面的温度可视化工具

    在本项目中,我们探索了一个基于Python的课程设计,它构建了一个实时温度可视化工具,利用了MQTT协议、emqx服务器、ESP8266微控制器以及PyQt5图形用户界面。下面将详细介绍这些关键组成部分及其相关知识。 首先,...

    nodejs数据可视化.zip

    在数据可视化项目中,我们将用HTML来构建用户界面,并通过AJAX异步地从Node.js服务器获取数据,实现动态交互的数据展示。 项目中的文件可能包括以下几个部分: 1. **服务器端代码**:使用Node.js和Express编写,...

    【推荐】大数据可视化大屏前端H5源码(20套).zip

    在这个H5源码包中,JavaScript的运用至关重要,因为它是实现大数据可视化的主力,可以与服务器通信,处理数据,以及创建丰富的用户界面。 H5,即HTML5,是HTML的最新版本,增加了许多新特性,如离线存储、拖放功能...

    地图数据可视化看板大屏幕模板,大屏数据可视化动态地图,HTML源码.zip

    这可能涉及到JavaScript或jQuery等脚本语言的运用,它们可以与服务器通信,获取实时数据,并在地图上动态显示。例如,当新的销售数据到来时,地图上的对应区域会自动高亮或者用特定的颜色表示。 此外,地图数据可视...

Global site tag (gtag.js) - Google Analytics