Java—聊天室的实现
在学习了IO流,多线程以及网络编程的知识之后,我们可以利用所学到的知识做一个小项目,这里我做了一个多人聊天室,实现了群聊和私聊功能,看完分享之后也可以自己去做一个练练手。
首先是整个项目的大体架构:首先要分为服务器端和客户端两个端口。如下图所示
![image.png](https://i-blog.csdnimg.cn/blog_migrate/fe8a5b627bbce8a80656b4d8b28cbe6e.webp?x-image-process=image/format,png)
客户端可以向服务器发送信息,并接受服务器返回的信息。而服务器实际上是作为一个中转站:在群聊模式时,将一个客户端的发送的信息转发至其他客户端。而在私聊时,服务器将信息发送到指定的客户端处,达到私聊的效果。
我们先依次附上服务器端与客户端的代码,再讲解实现的具体过程
服务器端(这里用本地主机作为服务器):
public class Server {
private List<MyChannel> all = new ArrayList<MyChannel>();
public static void main(String[] args) throws IOException {
new Server().start();
}
public void start() throws IOException {
ServerSocket server = new ServerSocket(7777);
while(true) {
Socket client = server.accept();
MyChannel channel = new MyChannel(client);
all.add(channel);
new Thread(channel).start();
}
}
/**
* 一个客户一条道路
* 建立服务器与客户端之间的数据通道
*
*/
private class MyChannel implements Runnable {
private DataInputStream dis;
private DataOutputStream dos;
private boolean flag = true;
private String name;
public MyChannel(Socket client) {
try {
dis = new DataInputStream(client.getInputStream());
dos = new DataOutputStream(client.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
flag = false;
try {
dis.close();
dos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
private String receive() {
String msg = "";
try {