官方服务微信:dat818 购买与出租对接

计算机网络实践:制作聊天程序,以Java实现并学习网络编程知识

2万

主题

2

回帖

6万

积分

管理员

积分
65532
发表于 昨天 13:41 | 显示全部楼层 |阅读模式
    计算机网络实践

    一、实践设计的目的和意义

    它对我们的日常生活来说是必不可少的。

    人们对网络的依赖程度日益加深,离不开网络的程度也越来越大。随之而来的是聊天工具的不断增多,像 QQ、MSN、微信等就是其中的代表。网络聊天推动了网络聊天系统的快速发展,基于此制作出了一个具备简单聊天功能的网络聊天程序。通过这个设计,我们能够更好地学习网络软件的编程知识。

    它有利于软件的维护和继承。

    此次设计的题目是聊天室。它能够巩固我们所学的 java 语言基础知识,还能增进我们的 java 语言编辑基本功,同时可以拓宽常用类库的应用。通过实践环节与手段,我们能够把所学的课程及相关知识加以融会贯通,从而全面理解网络编程的含义。

    聊天室程序简单,然而在其设计与实现过程中,我们能充分学到基于网络编程的技术,从而掌握网络编程的服务技术,也能够充分利用所学的 java 编程语言。

    二、实践设计的内容和要求

    实现聊天功能需要面向连接的编程技术。通过使用多线程,可以实现多个客户端与服务器的连接,进而实现数据的读取与输入。

    实现网络聊天系统的设计与实现,这能让我们掌握网络编程服务的技术,也能让我们对其有更深刻的了解,从而掌握这方面的知识。

    三、设计用设备仪器

    操作系统:

    开发工具:JDK1.8、

    四、实践设计的相关技术

    总的设计思想是借助 java 里的套接字以及(客户/服务器)来达成进程之间的通信。

    套接字工作原理:

    要通过互联网进行通信,你需要至少一对套接字。其中一个套接字运行在客户机端,我们将其称为某套接字;另一个套接字运行在服务器端,我们将其称为另一套接字。

    套接字之间的连接过程根据连接启动的方式以及本地套接字要连接的目标可分为三个步骤,分别是服务器进行监听,客户端提出请求,以及连接得到确认。

    服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,并且会实时监控网络状态,这就是所谓的服务器监听。

    客户端的套接字会提出连接请求,这就是所谓的客户端请求。其要连接的目标是服务器端的套接字。所以,客户端的套接字首先要描述它要连接的服务器的套接字,明确服务器端套接字的地址和端口号,接着再向服务器端套接字提出连接请求。所谓连接确认,就是当服务器端套接字监听到或接收到客户端套接字的连接请求时,它会响应客户端套接字的请求,然后建立一个新的线程,把服务器端套接字的描述发送给客户端。一旦客户端确认了此描述,连接就建立好了。同时,服务器端套接字会继续处于监听状态,继续接收其他客户端套接字的连接请求。

    TCP/IP协议参考模型:

    TCP/IP 实际上是一个能够一起协同工作的通信家族,它为网际数据通信提供了通道。为了便于讨论,我们可以将 TCP/IP 协议组大致分为三个部分:

    网络层包含协议,其中有 IP;还包含网际控制报文协议,即 ICMP;同时包含地址识别协议,也就是 ARP。

   


    传输层包含传输控制协议(TCP)以及用户数据报文协议(UDP)。 传输层有传输控制协议(TCP)这一协议。 传输层还有用户数据报文协议(UDP)这一协议。

    应用层是一组专门为应用程序开发的协议,处于 TCP 和 UDP 之上。这些协议包括文件传送协议(FTP)、域名服务(DNS)和简单的邮件传送程序(SMTP)等许多协议。

    此外,这种结构还有助于局部用户对操作和管理进行控制。

    TCP/IP 具备两个主要的功能。其一,IP 能够在网络之间(有时在特定的单个网络内部)进行路由选择。其二,TCP 可以把传递的数据传送到接收主机上的相应处理部件。

    根据传输数据类型的不同,主要分为三类:

    流式(SOCK-)方式下,两个通讯的应用程序需先建立虚拟连接。这种虚拟连接能提供可靠且面向连接的通信流,它依托 TCP 协议,以此保障了数据传输的正确性与有序性。

    数据报是 SOCK-DGRAM。它采用数据报协议 UDP。这种协议定义了一种无连接服务。数据通过相互独立的报文来进行传输。这些报文是无序的。并且不能保证可靠、无差错。

    原始套接字能够对底层协议如 IP 或 ICMP 进行直接访问,它的功能很强大,然而使用起来却比较不便。这种套接字主要是被用于一些协议的开发。

     的通信机制图

    五、项目设计与实践 1、设计思路

    在服务器端有一个部分用于维护所有用户相关的信息,这样就能保证可以和所有的用户进行通讯。

    客户端的动作:

    4. 开启一个专门为当前线程服务的线程。

    (2)退出(注销):

    (3)发送消息

    发送通讯内容之后,对方怎样知晓其用途呢?这是通过消息协议来达成的。

    客户端向服务器发的消息格式设计:

    命令关键字 @# 接收方 @# 消息内容 @# 发送方

    握手的线程专门用来接收该消息,而其他消息则由服务器新开启的与客户进行通讯的线程来接收。

    2)退出:exit @# 全部 @# null@#

    发送:在 @# JList.() 以及 @#.() 和 @#.() 上进行操作。

    服务器向客户端发的消息格式设计:

    命令关键字 @# 发送方 @# 消息内容

    登录:

   


    用户登录了(此登录信息用于给客户端显示),同时也用于给客户端维护在线用户列表。

    用户退出了。(这是给客户端显示用的)(同时也是给客户端维护在线用户列表用的)

    发送:

    msg @# 消息发送者 @# 消息内容 2、模块描述

    用户进行私聊,是通过共同的服务器来进行通信的,从而实现了一对一的聊天。

    (2)聊天室群聊功能:用户A可以在聊天室中对其余所有人说话

    服务器的开启与关闭情况如下:依据管理通信,服务器会开启并监听用户请求的链接;倘若服务器处于关闭状态,那么用户就无法进行登录。

    好友状态会实时显示:通过客户端的守护线程来实时对好友状态进行监控。守护线程每隔 10 秒就会向服务器端发送请求。服务器端会将当前在线的用户状态信息返回给客户端。如果当前在线的用户状态信息发生了变化,那么客户端就会依据服务器端返回的信息来更新好友状态。

    (5) 服务器对客户终端实时监控:只监听在线用户

    3、运行结果

    1、运行服务端程序,启动服务器

    2、运行客户端程序,客户端连接服务器

    3、创建多个客户端,连接服务器进行聊天

    4、退出客户端

    六、结束语

    本次通过设计程序,我对结构软件的设计有了新的认识。同时,编写程序让我对网络编程有了进一步的了解。在设计过程中,我了解到自己的知识比较有限,这导致程序还不够完善。回顾此次编写的 Java 程序。从理论方面可以学到很多东西,从实践方面也能学到很多东西。通过学习,不仅能巩固以前学的东西,还能学到课本上学不到的东西。本次设计让自己明白,必须把理论和实践相结合,从理论中得出结论,这样才能真正掌握这门技术。同时,在设计过程中,自己的思考能力也得到了提高,能够解决一些问题。真正体会到只有将一门知识学到能够自己运用的程度,才算是属于自己的。所以我必须强化实践,多进行练习。本次设计存在诸多不足与缺陷,程序中还有许多问题需要加以完善。例如,服务器需显示客户端加载的个数,以及用户聊天时的登录界面等一些问题都亟待完善。我会持续进行改进与完善。

    源码与详细过程
您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|小黑屋|关于我们

Copyright © 2001-2025, Tencent Cloud.    Powered by Discuz! X3.5    京ICP备20013102号-30

违法和不良信息举报电话:86-13718795856 举报邮箱:hwtx2020@163.com

GMT+8, 2025-4-3 14:38 , Processed in 0.076753 second(s), 17 queries .