任务十实现网络聊天ppt课件.pptx
《任务十实现网络聊天ppt课件.pptx》由会员分享,可在线阅读,更多相关《任务十实现网络聊天ppt课件.pptx(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、在此输入您的封面副标题任务十 实现网络聊天项目四 模拟聊天室任务十 实现网络聊天目录二任务描述 三技术概览四相关知识 五任务实施六任务小结一学习目标Java程序设计项目化教程项目功能这是一个简单的局域网聊天系统,目的是通过本项目的设计与实现过程,使读者掌握图形界面设计的基本方法,了解熟悉网络编程的基本概念,掌握套接字编程的基本方法,了解线程的基本概念,掌握线程创建和同步处理方法。模拟聊天室分为两个部分:服务器端应用程序和客户端程序。1服务器端应用程序要实现局域网聊天,首先需要设定服务器的人数上限和端口号,启动服务器,服务器负责监听并接收客户的请求,客户和服务器之间可以相互发送信息,客户之间也可
2、以互相发送信息,但客户之间传递信息要先发送给服务器,再由服务器发送给接收方。2客户端应用程序客户端要进入聊天系统,首先要连接服务器,通过登录窗口输入用户昵称和服务器IP地址、端口号。如果服务器已启动,则该客户允许进入聊天系统;客户进入聊天系统后,可以向服务器和其他客户发送信息,也可以接收服务器和其他客户的信息;也可以给所有客户发送信息。服务器端以端口号进行区分,一个端口就是一个聊天室或讨论组,规模以服务器设定的最大人数上限为限,可以创建多个聊天室或讨论组;客户端以用户昵称和服务器IP地址、端口号来连接服务器,以实现加入不同的聊天室或讨论组,可以创建多个客户端。Java程序设计项目化教程学习目标
3、技能目标: 1能正确使用线程进行程序设计。 2能熟练进行UDP网络编程。 3能熟练进行TCP网络编程。知识目标: 1掌握线程与进程的区别与联系。 2掌握线程的创建方式。 3掌握常见的网络类InetAddress类和URL类。 4掌握UDP网络编程的实现。 5掌握TCP网络编程的实现。Java程序设计项目化教程任务描述聊天室的服务器端与客户端的数据发送与接收操作需要通过局域网才能完成,另外,服务器端与客户端的数据收发是同时完成的,如果仅仅使用前面学习的知识是无法实现的。本任务通过对线程、进程、常用网络类、UDP网络编程、TCP网络编程的讲解,来实现聊天室服务器端与客户端之间的网络通信。Java程
4、序设计项目化教程技术概览线程是一个单独程序流程,是程序运行的基本单位。多线程是指一个程序可以同时运行多个任务,每个任务由一个单独的线程来完成。也就是说,多个线程可以同时在一个程序中运行,并且每一个线程完成不同的任务。Java中线程的实现通常有两种方法:派生Thread类和实现Runnable接口。网络编程是指编写运行在多个设备(计算机、移动终端)的程序,这些设备都通过网络连接起来。网络编程的目的就是直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。Java包中的API包含有类和接口
5、,它们提供低层次的通信细节。读者可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。Java包中提供了两种常见的网络协议的支持:TCP:TCP是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称TCP/IP。UDP:UDP是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。相关知识Java程序设计项目化教程线程概述传统的程序设计语言同一时刻只能执行单任务操作,效率非常低,如果网络程序在接收数据时发生阻塞,只能等到程序接收数据之后才能继续运行。随着 Internet 的飞速发展,这种单任务运行的状况越来越不被接受。如果网络接
6、收数据阻塞,后台服务程序就会一直处于等待状态而不能继续任何操作。这种阻塞情况经常发生,这时的 CPU 资源完全处于闲置状态。多线程实现后台服务程序可以同时处理多个任务,并不发生阻塞现象。多线程是Java 语言的一个很重要的特征。多线程程序设计最大的特点就是能够提高程序执行效率和处理速度。Java 程序可同时并行运行多个相对独立的线程。例如创建一个线程来接收数据,另一个线程发送数据,即使发送线程在接收数据时被阻塞,接受数据线程仍然可以运行。Java程序设计项目化教程线程概述一、进程在一个操作系统中,每个独立执行的程序都可称为一个进程,也就是“正在运行的程序”。目前大部分计算机上安装的都是多任务操
7、作系统,即能够同时执行多个应用程序,最常见的有Windows、Linux、UNIX等。我们在Windows操作系统下,在任务栏上单击鼠标右键,选择【任务管理器】选项可以打开任务管理器面板,在窗口的【进程】选项卡中可以看到当前正在运行的程序,也就是系统所有的进程,如eclipse.ext、QQ.exe*32、Maxthon.exe*32等。在多任务操作系统中,表面上看是支持进程并发执行的,例如可以一边听音乐一边聊天。但实际上这些进程并不是同时运行的。在计算机中,所有的应用程序都是由CPU执行的,对于一个CPU而言,在某个时间点只能运行一个程序,也就是说只能执行一个进程。操作系统会为每一个进程分配
8、一段有限的CPU使用时间,CPU在这段时间中执行某个进程,然后会在下一段时间切换到另一个进程中去执行。由于CPU运行速度很快,能在极短的时间内在不同的进程之间进行切换,所以给人以同时执行多个程序的感觉。Java程序设计项目化教程线程概述二、线程我们知道,每个运行的程序都是一个进程,在一个进程中还可以有多个执行单元同时运行,这些执行单元可以看作程序执行的一条条线索,被称为线程。线程(Thread)是控制线程(ThreadofControl)的缩写,它是具有一定顺序的指令序列(即所编写的程序代码)、存放方法中定义局部变量的栈和一些共享数据。线程是相互独立的,每个方法的局部变量和其他线程的局部变量是
9、分开的,因此,任何线程都不能访问除自身之外的其他线程的局部变量。如果两个线程同时访问同一个方法,那每个线程将各自得到此方法的一个拷贝。由于实现了多线程技术,Java显得更健壮。操作系统中的每一个进程中都至少存在一个线程。当一个Java程序启动时,就会产生一个进程,该进程会默认创建一个线程,在这个线程上会运行main()方法中的代码。Java程序设计项目化教程线程概述多线程带来的好处是更好的交互性能和实时控制性能。多线程是强大而灵巧的编程工具,但要用好它却不是件容易的事。在多线程编程中,每个线程都通过代码实现线程的行为,并将数据供给代码操作。代码和数据有时是相当独立的,可分别向线程提供。多个线程
10、可以同时处理同一代码和同一数据,不同的线程也可以处理各自不同的代码和数据。多线程看似是同时执行的,其实不然,它们和进程一样,也是由CPU轮流执行的,只不过CPU运行速度很快,故而给人同时执行的感觉。Java程序设计项目化教程线程的创建Java提供了两种多线程实现方式,一种是继承java.lang包下的Thread类,覆写Thread类的run()方法,在run()方法中实现运行在线程上的代码;另一种是实现接口,同样是在run()方法中实现运行在线程上的代码。下面我们分别讲解,并比较它们的优缺点。一、继承Thread类创建多线程前面的程序都是声明一个公共类,并在类内实现一个 main 方法。事实
11、上,前面这些程序就是一个单线程程序。当它执行完 main 方法的程序后,线程正好退出,程序同时结束运行。请查看教材文件10-1。 案例代码Java程序设计项目化教程类是一个通用的线程类,由于默认情况下run方法是空的,直接通过Thread类实例化的线程对象不能完成任何事,所以可以通过派生Thread类,并用具体程序代码覆盖Thread类中的run方法,实现具有各种不同功能的线程类。在程序中创建新的线程的方法之一是继承Thread类,并通过Thread子类声明线程对象。线程的创建请查看教材文件10-2。 案例代码Java程序设计项目化教程通常创建一个线程的步骤如下。 (1)创建一个新的线程类,继
12、承 Thread 类并覆盖 Thread 类的 run() 方法。 class ThreadType extends Thread public void run() (2)创建一个线程类的对象,创建方法与一般对象的创建相同,使用关键字 new 完成。 ThreadType tt = new ThreadType(); (3)启动新线程对象,调用 start()方法。 tt.start(); (4)线程自己调用 run() 方法。 void run();线程的创建Java程序设计项目化教程请查看教材文件10-3。 案例代码线程的创建Java程序设计项目化教程二、实现Runnable接口创建多线
13、程通过实现Runnable接口的方法是创建线程类的第二种方法。Java中只支持单继承,一个类一旦继承了某个父类就无法再继承Thread类,比如,学生类Student继承了Person类,就无法通过继承Thread类创建线程。利用实现Runnable接口来创建线程的方法可以解决Java语言不支持的多重继承问题。Runnable接口提供了run()方法的原型,因此创建新的线程类时,只要实现此接口,即只要特定的程序代码实现Runnable接口中的run()方法,就可完成新线程类的运行。线程的创建请查看教材文件10-4。 案例代码Java程序设计项目化教程通常实现Runnable 线程的步骤如下。 (
14、1)创建一个实现 Runnable 接口的类,并且在这个类中重写 run 方法。 class ThreadType implements Runnable public void run() (2)使用关键字 new 新建一个 ThreadType 的实例。 Runnable rb = new ThreadType ();(3)通过Runnable 的实例创建一个线程对象,在创建线程对象时,调用的构造函数是new Thread(ThreadType),它用 ThreadType 中实现的 run() 方法作为新线程对象的 run() 方法。 Thread td = new Thread(rb)
15、; (4)通过调用 ThreadType 对象的 start()方法启动线程运行。 td.start(); 线程的创建Java程序设计项目化教程请查看教材文件10-5。 案例代码线程的创建Java程序设计项目化教程实现Runnable接口相对于继承Thread类来说,有如下显著的好处:1适合多个相同程序代码的线程去处理同一个资源的情况,把线程同程序代码、数据有效的分离,很好地体现了面向对象的设计思想。2可以避免由于Java的单继承带来的局限性。在开发中经常碰到这样一种情况,就是使用一个已经继承了某一个类的子类创建线程,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么就只能
16、采用实现Runnable接口的方式。事实上,大部分的应用程序都会采用第二种方式来创建多线程,即实现Runnable接口。线程的创建Java程序设计项目化教程Java是伴随Internet发展起来的一种网络编程语言。Java专门为网络通信提供了软件包,为当前最常用的TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)网络协议提供了相应的类,使用户能够方便地编写出基于这两个协议的网络通信程序。一、网络协议虽然通过计算机网络可以使多台计算机实现连接,但是位于同一个网络中的计算机在进行连接和通信时必须要遵守一定的规则,这就好比在道
17、路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Control Protocol/Internet Protocol,传输控制协议/英特网互联协议)、UDP协议(User Datagram Protocol,用户数据报协议)、ICMP协议(Internet Control Message Protocol,Internet 控制报文协议)和其他一些协议的协议组。网络编程技术基
18、础Java程序设计项目化教程本任务中所学的网络编程知识,主要就是基于TCP/IP协议中的内容。在学习具体的内容之前,首先来了解一下TCP/IP 协议。TCP/IP(又称TCP/IP协议簇)是一组用于实现网络互连的通信协议,其名称来源于该协议簇中两个重要的协议(TCP协议和IP协议)。基于TCP/IP的参考模型将协议分成四个层次。网络编程技术基础Java程序设计项目化教程TCP/IP协议中的四层分别是链路层、网络层、传输层和应用层,每层分别负责不同的通信功能,接下来针对这四层进行详细的讲解。链路层:也称为网络接口层,该层负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协
19、议,而由参与互连的各网络使用自己的物理层和数据链路层协议与TCP/IP的网络互联层进行连接。网络层:也称网络互联层,是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP(Transmission Control Protocol)协议,也可以采用UDP(User Datagram Protocol)协议。应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。网络编程技术基础Java程序设计项目化教程本任务所需的网络编程,主要涉及的是传输层的TCP、UDP协议和网络层的IP协议
20、。UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输,例如视频会议使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。网络编程技术基础Java程序设计项目化教程TCP协议是面向连接的通信
21、协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务器端发出连接请求,每次连接的创建都需要经过“三次握手”。第一次握手,客户端向服务器端发出连接请求,等待服务器确认;第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求;第三次握手,客户端再次向服务器端发送确认信息,确认连接。网络编程技术基础Java程序设计项目化教程由于TCP协议的面向连接特性,它可以保证传输数据的安全性,所以是一个被广泛采用的协议,例如在下载文件时,如果数据接收不完整,将会导致文件数据丢失而不能被
22、打开,因此,下载文件时必须采用TCP协议。二、IP和端口号要想使网络中的计算机能够进行通信,必须为每台计算机指定一个标识号,通过这个标识号来指定接收数据的计算机或者发送数据的计算机。在TCP/IP协议中,这个标识号就是IP地址,它可以唯一标识一台计算机。目前,IP地址广泛使用的版本是IPv4,它由4个字节大小的二进制数来表示,如:。由于二进制形式表示的IP地址非常不便记忆和处理,因此通常会将IP地址写成十进制的形式,每个字节用一个十进制数字(0-255)表示,数字间用符号“.”分开,如 “10.0.0.1”。随着计算机网络规模的不断扩大,对IP地址的需求也越来越多,IPv4这种用4个字节表示的
23、IP地址将面临使用枯竭的局面。为解决此问题,IPv6 便应运而生。IPv6使用16个字节表示IP地址,它所拥有的地址容量约是IPv4的81028倍,达到2128个(算上全零的),这样就解决了网络地址资源数量不足的问题。网络编程技术基础Java程序设计项目化教程IP地址由两部分组成,即“网络.主机”的形式,其中网络部分表示其属于互联网的哪一个网络,是网络的地址编码,主机部分表示其属于该网络中的哪一台主机,是网络中一个主机的地址编码,二者是主从关系。IP地址总共分为5类,常用的有3类,介绍如下。A类地址:由第一段的网络地址和其余三段的主机地址组成,范围是到B类地址:由前两段的网络地址和其余两段的主
24、机地址组成,范围是到C类地址:由前三段的网络地址和最后一段的主机地址组成,范围是到另外,还有一个回送地址,指本机地址,该地址一般用来测试使用,例如:ping 127.0.0.1 来测试本机TCP/IP是否正常。网络编程技术基础Java程序设计项目化教程通过IP地址可以连接到指定计算机,但如果想访问目标计算机中的某个应用程序,还需要指定端口号。在计算机中,不同的应用程序是通过端口号区分的。端口号是用两个字节(16位的二进制数)表示的,它的取值范围是065535,其中,01023之间的端口号由操作系统的网络服务所占用,用户的普通应用程序需要使用1024以上的端口号,从而避免端口号被另外一个应用或服
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 任务十 实现网络聊天ppt课件 任务 实现 网络 聊天 ppt 课件
限制150内