上传者: 75276375
|
上传时间: 2025-06-07 21:42:49
|
文件大小: 169KB
|
文件类型: DOCX
### CSU计网实验B1知识点详述
#### 实验目的
本次实验旨在使学生能够:
1. **熟练掌握** C++、JAVA 或 Python 等编程语言在集成开发环境中编写网络程序的方法。
2. **深入理解** 客户端/服务器(C/S)架构的应用模式及其工作原理。
3. **学习并实践** 网络中进程间通信的基本原理与具体实现方法。
#### 实验要求
- 实验要求参与者在同一台机器上实现客户端和服务器的功能,即**本机既是客户端也是服务器端**。
#### 实验内容
实验要求参与者编写一个基于socket的简易聊天程序,具备以下功能:
1. **点对点通信**:任意两个客户端之间能够相互发送消息。
2. **群组通信**:客户端能够向组内的特定成员发送消息,而非组内成员不应接收这些消息。
3. **广播功能**:客户端能够向所有其他成员广播消息。
#### 实验方案设计与实施
##### 服务器端开发
- **Socket编程**:使用Java的Socket API来创建服务器端,并监听特定端口,等待客户端的连接请求。每当有客户端连接时,服务器会为该连接创建一个新的线程来处理通信。
- **多线程处理**:为了支持多个客户端同时在线聊天,采用了多线程技术。每个客户端连接都会被分配到一个独立的线程,这样可以并行处理来自不同客户端的消息。
- **数据解析与发送**:服务器需要解析客户端发送的数据包,提取出消息内容、发送者等信息,并将这些信息广播给所有在线的客户端。此过程使用Java的I/O流实现数据的读写操作。
##### 客户端开发
- **GUI设计**:使用Java的Swing库设计客户端的图形用户界面(GUI),界面包含登录框、聊天窗口、输入框等控件。
- **Socket连接**:客户端通过Socket连接到服务器并与之进行通信。这里使用Java的Socket API来实现。
#### 示例代码分析
##### 1. Server.java
```java
package chatRoom;
public class Server {
public static void main(String args[]) {
new ServerChat() ;
}
}
```
这段代码定义了一个名为`Server`的类,其中只有一个`main`方法,用于启动服务器应用程序。
##### 2. ServerChat.java
```java
package chatRoom;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
public class ServerChat extends JFrame {
private static final long serialVersionUID = 1L;
private List sockets = new ArrayList();
private List clientname = new ArrayList();
private JTextArea contentArea;
private JTextArea sendArea;
private JComboBox cmb;
public static void main(String args[]) {
new ServerChat();
}
public ServerChat() {
try {
ServerSocket ss = new ServerSocket(9999) ;
this.init();
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setVisible(true);
while(true) {
Socket socket = ss.accept() ;
sockets.add(socket);
Thread thread = new Thread(new ServerThread(socket)) ;
thread.start();
}
}catch(Exception ex) {
ex.printStackTrace();
}
}
public void init( ) {
```
这部分代码展示了服务器类`ServerChat`的实现,主要负责服务器的初始化和运行逻辑:
- 使用`ServerSocket`监听端口9999,等待客户端连接。
- 为每次接受的连接创建一个新的`Socket`对象,并将其添加到`sockets`列表中。
- 为每个新连接创建一个新的线程`ServerThread`来处理客户端的请求。
- 初始化GUI组件,包括聊天内容区域、发送区域和组合框等。
- 设置窗口关闭行为,并使窗口可见。
通过以上内容,我们可以看到整个聊天程序的设计思路和技术实现细节,这不仅有助于学生理解和掌握网络编程的基本概念,还能够提升其编程实践能力。