群聊服务器
群聊服务器要将所有连接到服务器上的客户端对象都集中到一起(比如一个队列)来处理,将其中每个对象发送的消息转发给其他所有连接的客户端,并且在有新连接加入时对其他的连接的客户端进行通知等等功能。所以需要编写几个类来分别实现这些功能。每个类的功能要尽量的单一,这样便于调试。
服务器增加了验证登陆信息、转发消息等多个功能,也就需要增加几个类来辅助。首先对于登陆用户来说,需要验证其用户名和密码,创建一个DaoTools类:负责验证用户名和密码是否正确。验证用户信息的过程可以首先模拟一个数据库,用一个map存储用户名和对应的用户信息,在运行到验证模块前就将设置好的数据存入MAP,验证时,通过用户名得到对应的用户类,也就得到了该用户密码,验证是否符合。因此,也就需要创建一个用户信息类,其中存储用户名,密码以及以后可能用到的IP地址、登录时间等等信息。转发消息作为另外一个独立功能,也需要建立一个辅助类,其中放置通知上下线以及转发消息的方法。因为上线用户个数不定,可用一个队列来存放客户端处理线程类每增加一个客户连入,则启动一个处理线程,加入到队列中,而当前在线人数就是该队列的长度。转发消息则只要遍历队列,发送消息即可达成。
综上,总共需要设置五个类:
ChatServer类:创建服务器并等待连结。
ServerThread类:处理连结的线程类,读取客户端输入流并发送给客户端。
UserInfo类:用户信息类,存放用户属性。
DaoTools类:一个辅助类,使用时并不需要创建对象,直接调用其中存放的方法就好,因此其中的方法都是static方法。这个类中存放的是验证用户登录的方法。
ChatTools类:同样不需要创建对象,是一个辅助方法,转发客户机发送的消息,并有将新上线的用户即一个线程加入队列或者下线用户移除队列的方法。
这里列出DaoTools类的代码,因为其中使用了静态块的方法。静态块是在类被加载之时就优先执行的代码,所以在验证用户信息之时,就不会出现map中无数据的情况。
package Server1;
import java.util.HashMap;
/**
* 系统数据访问操作实现类
* 帐号验证,数据保存,更改……
* @author Administrator
*
*/
public class DaoTool {
/**
* 查看这个用户是否可以登录成功
* @param user:要检查的用户对象
* @return:是否成功登录
*/
public static boolean checkLogin(UserInfo user){
//在此只验证用户名是否存在
if(userDB.containsKey(user.getName())){
return true;
}
System.out.println("认证失败!:"+user.getName());
return false;
}
//内存用户信息数据库
private static java.util.Map<String, UserInfo> userDB = new HashMap<String, UserInfo>();
//静态块:模拟生成内存中的用户数据,用户名为user1~10
//当程序启动时,这段代码(静态块中的)会自动执行,向userDB中放放数据
static{
for(int i =0;i<10;i++){
UserInfo user = new UserInfo();
user.setName("user"+i);
user.setPassword("password"+i);
userDB.put(user.getName(), user);
}
}
}
简单客户端
简单客户端与服务器类似,不过客户端不是要开放端口来等待连接,而是要知道服务器的IP和端口去连接。客户端对象是Socket类的对象,在创建时即要指定要连接的服务器的IP和端口。
Socket client = new Socket("ip",port);
其中ip是一个代表地址的字符串,port则是一个int值。
与服务器存在同样的问题,所以这条语句也需要try catch(当然throws也可以)。
之后从这个Socket对象上取得输入输出流就可以与服务器进行通信了。当然,通信还是要按照一定的协议,这样双方才能够互相理解对方在说什么!
分享到:
相关推荐
串口通信项目总结 本篇资源的主要内容是对多串口接收项目的总结,涵盖技术总结和心得总结两方面。下面将对标题、描述、标签和部分内容进行详细的解释和总结。 一、技术总结 技术总结是对整个项目的技术实现过程的...
随着技术的不断进步,第二代移动通信技术(2G)的出现,如GSM系统,引入了数字传输,这在很大程度上改善了通信质量,提升了安全性。但是,不同通信标准并存的现实问题,也限制了全球漫游和网络带宽的发展。 第三代...
在IT领域,网络通信是至关重要的部分,而TCP(传输控制协议)作为其核心协议之一,为应用程序提供了可靠的、基于连接的数据通信服务。本实验“TCP异步通信试验”聚焦于利用MFC(Microsoft Foundation Classes)框架...
### 电力系统通信相关知识总结 #### 一、基本概念 1. **通信系统**:指从信息源头至信息终点间的信息传输全过程所涉及的所有硬件设备的集合,其中包括终端设备和连接这些设备的传输线路。 2. **通信网**:是由...
别人自己写的总结,内容是常用进程间通信方法及函数
### 光纤通信总结 #### 一、光纤通信概述 光纤通信是一种先进的通信技术,它利用光纤作为传输介质,通过光波携带信息进行数据传输。相比于传统的金属导线,光纤通信具有诸多优势,如传输距离远、抗干扰能力强等。 ...
"通信电子线路总结习题考试重点" 通信电子线路是电子工程领域中的一个重要分支,涉及到信号传输、电子线路设计、通信系统等方面。本资源总结了通信电子线路的重要知识点,涵盖了传输线、电感、电容、谐振回路、放大...
常用一些通信总结,如CAN 485 RS232 SPI SCI I2C
【工程通信个人年终总结】 在过去的一年里,作为一名工程通信领域的从业者,我经历了从初入行业到逐渐熟悉业务的转变。在***公司的各个项目中,我不仅深化了对工程通信的理解,同时也意识到自身存在的问题与不足。...
"移动通信复习总结" 移动通信是指通信双方或至少有一方处于运动中进行信息传输和交换的通信方式。它的发展经历了多代,包括第一代模拟通信系统、第二代数字蜂窝移动通信系统和第三代数字蜂窝移动通信系统。 移动...
"《光纤通信》刘增基 第二版 总结" 《光纤通信》是当今信息时代最重要的通信方式之一,通过光纤将信息传输到全球各个角落。刘增基第二版总结为我们提供了一个整体的认识光纤通信的机会。 光纤通信的优点: 1. ...
[020]VC++串口通信总结.zip上位机开发VC串口学习资料源码下载[020]VC++串口通信总结.zip上位机开发VC串口学习资料源码下载[020]VC++串口通信总结.zip上位机开发VC串口学习资料源码下载[020]VC++串口通信总结.zip...
2. **S7-300与WinCC通信** - **OPC通信**:使用OPC (OLE for Process Control)服务器,S7-300可以通过OPC接口与WinCC进行数据交换,实现监控和数据采集功能。 - **TCP/IP通信**:通过以太网连接,S7-300可以与...
### VC串口通信总结 #### 一、串口通信概述 串口通信是计算机与外部设备之间进行数据交换的一种常见方式。随着技术的发展,虽然USB和以太网等其他通信方式逐渐普及,但在某些特定场景下,特别是工业控制领域,串口...
总结来说,施耐德AT310变频器与西门子S7-1200 PLC通过Modbus RTU通信,需要精确配置双方的通信参数,并注意地址的对应关系。同时,理解并熟练掌握PLC的编程技巧,对于成功实现通信至关重要。在实际操作中,不断试验...
Socket 通信异常解决总结 Socket 通信异常是指在网络通信过程中出现的各种错误和异常,包括网络连接断开、服务器端或客户端程序异常、网络链路异常等。这些异常会导致 Socket 连接断开,影响系统的稳定性和可靠性。...
这个压缩包文件“多个串口通信DEMO和个人总结资料”显然包含了一些关于串口通信的实际示例和作者的经验总结,对于学习和解决串口通信问题非常有帮助。 首先,我们要理解串口通信的基本概念。串口通信,也称为串行...
总结来说,D2D通信技术是解决无线频谱紧张问题的关键技术,它通过直接设备间的通信,提高了通信效率,降低了网络负荷,拓展了无线通信的潜力。在未来的5G网络和物联网应用中,D2D通信有望发挥更大的作用。
2. **Profinet IO通信**:对于S7-1200,内置的以太网接口可以支持Profinet通信,无需额外硬件。同样,需要在设备配置中定义IP地址和设备角色,建立网络连接。编程时,可以利用SIMATIC NET库中的NODEx通信指令进行...