1、 基于 TCP 的计算机通信工具编程实现 课程设计课程设计 一、课题内容和要求 1.课题内容 基于 TCP 和多线程编程的聊天程序实现 2.课题要求 网络聊天程序设计非常复杂, 允许多个人同时聊天更加需要多线程技术的支持, 请实现一个 简单的多线程网络聊天程序模拟。 二、设计思路分析 1. 在网络越来越发达的今天, 人们对网络的依赖越来越强, 网络聊天已经成了许多人生活 中必不可少的一部分, 基于这样的需求, 出现了许多网络聊天通信工具, 像 QQ, MSN 等等, 但是人们已经不再满足于单一的两个人之间的聊天, 而是对多人同时聊天产生了兴趣, 于是 出现了网络聊天室, 不同地方的人可以在那个
2、虚拟的聊天室里面热烈聊天。 基于这样的想法, 我们用 JAVA 设计一个多人同时聊天的小程序,用 Socket 编程实现网络通讯,面向连接的, 采用多线程的实现技术。 2. 在程序中,可以设置加入连接的最大数目,通过更改 IP 地址和端口号,成为不同的客 户端,与服务器端连接,进行多用户聊天。 3. 为方便用户交互,我们采用图形化的用户界面。实现了好友添加,消息收发、显示等基 本功能。 三、概要设计 该网络聊天程序大致分为三个主要部分:客户端、服务器端和用户图形界面。而运行在不同 的机器上的进程是通过向套接字发送报文来通讯的。 各个部分的初步设计思想、 流程及存储 结构如下: 1.程序整体框架
3、:主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会 话。当一个 Socket 会话产生后,将这个会话交给线程处理,然后主程序继续监听。而进程 通过 TCP 套接字实现通信的示意图如下所示: . 套接字 进程 主机或服务器 具有缓 存字 变量的 TCP 主机或服务器 进程 套接字 具有缓 存变 量的 TCP INTERNET 客户机/服务器应用程序使用面向连接的设计思路: 服务器 客户端 . 2. 客户端(Client) 客户端,使用 Socket 对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功, 打开会话;会话完成后,关闭 Socket。客户端不需要指定打开的端口,通
4、常临时的、动态的 分配一个端口。 3. 服务器端(Server) 服务器端,使用 ServerSocket 监听指定的端口,端口可以随意指定(由于 1024 以下的端口 通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于 1024 的端口) , 等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。 4. 用户图形界面 用户图形界面方便程序与用户的交互,多个用户参加,完成会话功能,具体的设计要方便用 户的使用,直观清晰,简洁明了,友好美观。 5. 存储结构 下面列出主要存储结构或变量: 存储结构、变量、对象 类型 说明 post InetAddress 标识 IP 地
5、址 Port int 标识端口 Server ServerThread 服务器端连接数 Client Socket 客户端连接数 Client(String ip,int p,Face chat) public Client 类成员函数 Public void run() Void Client、Server 类成员 对入请求创建套 接字 port=x; 等待入连接请求 从 connettionsocket 读请求 关闭 clientsocket 关闭 connettionsocket 从 clientsocket 读回 答 向connettionsocket 写回答 使用clientsock
6、et发送 请求 创建与port=x连接的 套接字 TCP 连接 建立 函数 Server(int port,Face chat) public Server 类成员函数 Face() Public Face 类成员函数 四、详细设计 代码分服务器端、客户端、和用户图形界面三部分,分别如下: 1.服务器端 服务器端主要是使用 ServerSocket 类,相当于服务器 Socket,用来监听试图进入的连接,当 新的连接建立后,该类为他们实例化一个 Socket 对象,同时得到输入输出流,调用相应方 法完成会话。 具体代码如下: package nupt.java.socket; import java.awt.*; import .*; import java.io.*; public class Server extends Thread ServerSocket skt; / ServerSocket 类监听进入的连接,为每个新的连接产生一个 Socket 对 象 Socket Cli