《Java程序设计》大作业设计报告

设计名称多人在线聊天小程序

学生姓名

学号

学生班级

设计时间

设计成绩

一、问题描述及设计思路

问题描述:用java编写一个聊天的小程序,可以支持多人在线同 时聊天。

设计思路:写一个服务端和客户端。服务端负责记录客户端的登 陆还有接收客户端发来的信息,然后把客户端发来的聊天信息转发给 在线的所有客户端。客户端提供一个聊天窗口给用户,可以把服务器 发来的信息显示和把用户的聊天内容发到服务端,服务端再发信息给 所有人。

二、详细设计过程

服务端的设计过程:每次都创建单个Socket ,并调用accept。等 候一个新的客户连接。在客户连接后,返回一个Socket ,然后用它创 建一个客户端对象(Client ),然后启动线程。然后利用链表(List(ciient)) 存这个客户端对象。最后再调用accepto,等候下一次连接请求。

在服务端接收到某个客户端发送来的信息时,服务端就会把这个 信息转发给链表(List(Glient))里面的所有客户端。在发送信息给某个用户 时发现发送不出去,说明这个用户退出了,然后把他从链表里删除。

客户端的设计过程:客户端的GUI程序设计使用swing组件。界 面由三个部分组成 多行文本(JTextArea),单行文本(JTextField)还有发 送按钮(JButton)。J Button 和 JTextField 用面板类 JPanel 和在一起, 采用BorderLayout布局,然后JPanel和JTextArea也采用 BorderLayout布局。在用户输入文字以后回车或者鼠标点击“发送“按 钮就会向服务端发现输入的信息。

在用户启动代码之前需要在程序中修改自己的聊天昵称,如图所 示地方竺i弩弩二上]然后再输入服务端的IP和端口号,如

图所示地方,= neW SoCket('-127.0.0.1^ 8888);。这样就就可以启动 程序进行聊天了。程序通过IP地址和端口号返回一个Socket对象, 然后通过Socket对象建立输入输出流,然后启动线程。

三、结论及体会

四、附录(图表、关键代码)

测试聊天试图:

1⑥ 邓勤勒勤忌恳:正在群颈中??

[£>j log :正在奉聊中“**

飓勒勦勤恳1: ±家好,有人在吗

嗨輸吧

路人莊?龛觉得没有

log: soga

邓fcj勤蛻恳恳:==

徑華裁勤恳B: ±家好,有人在吗

疇轆吧

路人莊?龛觉得没有

log: soga

邓勤勤断恳恳:==

服务端关键代码:

1.
while (stat) {
Socket s = ss
Sys tem.out.pr intln ("a die nt connect ed! n);
Client c = new Client(s); new Thread(c).start();

clients.add(c); //将每个客八端加入到容器里 说明:创建单个Socket ,并调用accept。等候一个新的客户连接,利 用Socket创建Client对象,启动线程后再把Client对象存进Listo 2.

dis = new DatalnputStream(s.getlnputStream());
dos = new DataOutputStream(s.getoutputStream()); cont 二 true;
} catch (IOException e) { e?printStackTrace();
}

说明:利用创建的Socket,建立输入输出流对象,负责接收该客户发

来的信息和发送给该用户信息。

3.

public void send(String str) { // 用于发送给客八端
try {
dos.writeUTF(str);
} catch (IOException e) { die nts ? remove (this);
System. out. println("—个客户退出 了 “); // e.printStackTrace();
}
}
while (cont) {
String str = dis.readUTF(); // 收到客户端信息 System?out.println(str);
for (int i = 0; i < dients.size(); i++) { Client c = clients?get(i);
c.send(str); //发送给所冇用户
}
}

说明:在接收到信息时,就把信息转发给所有人。

客户端关键代码:

button?addActionListener(new ActionListener() {
public void actionPerformed(