读书笔记:《Java语言程序设计》–郭克华
案例介绍
上一篇博客已经介绍了客户端和服务器的相互通信。但是实际应用中,应该是客户端和客户端聊天,而不是客户端和服务器聊天。客户端和客户端聊天的本质是信息由服务器端转发。因此本篇博客将开发一个支持多个客户端的程序。服务器端界面如图1所示。
图一
当客户端出现时,需要输入昵称,如图2所示。
图二
单击“确定”按钮,连接到服务器。如果连接成功服务器回送一个“连接成功”的信息,如图3所示。
图三
单击“确定”按钮,即可进行聊天。
为了体现多客户端效果,打开了3个客户端,如图4所示。
图四
在界面下方可以输入消息,按Enter键,消息发出。消息发出后,文本框自动清空。消息发送后,能够让各个客户端收到聊天消息,聊天消息打印在界面上的多行文本框内,在打印聊天信息的同时,还能够打印这条聊天消息的发出人。
编写服务器程序
要让服务器端能够接受多个客户端的连接。但是,由于和之前写的TCP变成有着较大的区别,需要注意以下几个问题:
1.由于服务器端不需要知道客户端的连接,服务器端就不需要有现成负责多个客户端连接。
2.当客户端连接后,服务器端要等待这些客户端传送消息,而事先并不知道客户端什么时候会信息。所有,必须开一个线程,读取客户端发送过来的信息。注意,不需要为每个客户端开一个线程。
3.服务器收到某个客户端信息之后,需要将其转发给各个客户端,这就需要再服务器端保存各个客户端的地址。但是,地址只能通过DatagramPacket获得,因此,服务器端必须有一个集合来保存所有客户端的地址。每个客户端启动时,可以发给服务器端一个DatagramPacket来告诉服务器它的地址。
因此整个服务器端程序的基本结构如下: