计算机网络综合实训
网络程序设计
作者姓名
学号
所在院系 计算机与信息工程学院
学科专业名称 计算机科学与技术
导师及职称 柯宗武 教授
提交时间 2023/05/28
仿qq聊天的设计与实现
(指导教师,柯宗武 教授)
(湖北师范大学计算机与信息工程学院 中国 黄石 435002)
一、实训目的
编写一个类似于QQ聊天的网络程序。通过仿qq聊天室的设计与实现将计算机网络应用到实处,从而更好的理解和掌握计算机网络。
二、相关技术
1、配置环境
操作系统:windows11
编程语言:java jdk11
编译器:IDEA
2、JAVA实现互动聊天程序
1、用JFrame制作客户端和服务端的界面
2、使用Socket网络编程TCP协议完成数据传输
3、监听发送按钮的点击事件,实现点击发送按钮发送消息
4、监听键盘点击事件,实现点击回车键发送消息
3、Socket
Socket(套接字)是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序),各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。Socket(套接字)可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。它是网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的Socket(套接字)中,该Socket(套接字)通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的Socket(套接字)中,使对方能够接收到这段信息。 Socket(套接字)是由IP地址和端口结合的,提供向应用层进程传送数据包的机制。
4、TCP协议
TCP是面向连接的运输层协议。应用程序在使用TCP协议之前,必须先建立TCP连接。在传送数据完毕后,必须释放已经建立的TCP连接每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)TCP 提供可靠交付的服务。通过TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达TCP提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接受缓存,用来临时存放双向通信的数据面向字节流。TCP中的“流”指的是流入到进程或从进程流出的字节序列。
图2-1 TCP通信
三、需求分析
对于程序的设计过程中可行性分析是重中之重,优秀的分析可以极大的节约成本,为开发的顺利铺垫坚实的道路。因此要对系统分别进行技术可行性、经济可行性全面分析。
1.技术可行性
通过系统设计相关技术分析,多方面能够反映了技术的可行性。另外,即时通讯系统的开发已经很多的实例,技术的要求度并不高,各类进行开发的软件获取并不困难,所以该项目成功开发是可行的。
2.经济可行性
从经济方面观察,该实训经济,并且对于开发初学者来说是有一定参考价值的,所以通过以上两方面来看这一点是可行的。
3.项目概述
该项目是一个初步项目,实现小型聊天室,用户可以自己注册账户并且登录,账户数据储存在数据库中,登录完成后便进入聊天界面,聊天功能是基于websocket实现的,WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。即实现了全双工通信。
四、详细设计
本系统运用socket开发技术作为构建信息传递的通道,只需在IDEA JAVA环境中开发程序即可。完成界面搭建,要实现互动聊天,然后需要两个程序:一个服务端(Server),一个客户端(Client),搭建基本一致。
1、部分代码
```java
//Server
public static void main(String[] args)throws Exception{
Socket socket=new Socket("127.0.0.1",8899);
Client client=new Client();
OutputStream out=socket.getOutputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer=new PrintWriter(out,true);
//Client
public static void main(String[] args)throws Exception{
Server server=new Server();
ServerSocket serverSocket=new ServerSocket(8899);
System.out.println("Starting listening...");
while (true){
Socket socket=serverSocket.accept();
//获取客户端主机名
InetAddress address=socket.getInetAddress();
String name=address.getLocalHost().getHostName();
System.out.println(name+"已连接");
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer=new PrintStream(socket.getOutputStream(),true);
2、演示效果
五、实验总结
1、websocket的端口一定要和tomcat的端口一致!否则websocket不能正常启动!
2、所有依赖的包一定放入tomcat的lib包中,否则会找不到依赖的包!
3、经过此处实训,更好地掌握学会计算机网络相关知识。回顾整个过程,我感觉对于以往所学的知识又有了新的体会。
.