Java网络编程.ppt_第1页
Java网络编程.ppt_第2页
Java网络编程.ppt_第3页
Java网络编程.ppt_第4页
Java网络编程.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java语言与JBuilder应用初步 第十五章 网络编程初步,回顾,JBuilder创建工程 如何使用JBuilder制作压缩包 如何使用JBuilder发布程序 Java的I/O流库,本章要点,网络协议入门 基于Socket的网络编程 服务器-客户端程序,网络协议入门,网络编程初步 近年来,因特网得到了广泛的发展和应用 Java语言的产生与推广,也与网络息息相关 利用Java语言强大的功能,将使得网络编程变得十分简单 网络传输协议 接入网络的计算机都遵循同样的协议,这就是TCP/IP协议 TCP/IP协议将网络分成多层,网络协议入门,网络传输的层次结构 常用的网络层次有4层,分别是连接层、

2、网络层、传输层和应用层 我们编写的网络程序通常处在应用层,在这一层,不需要追究有关网络或网卡的技术细节,就可以编写出很好的程序,C/S 模式,在 C/S 模式下,用传输协议进彼此通信的进程包括客户进程(C)和服务器进程(S) 向网上服务提供者主动提出服务请求,并得到服务的进程称作客户进程 ( Client ) 随时等待服务请求,并及时响应,提供网上资源的进程称作服务器进程( Server ) 服务器进程通常是并发、多线程的,可同时分别处理多个不同客户进程的服务请求 为区别与标识同在一台计算机上运行的多个服务器进程及客户进程,要分别标识每个进程,TCP协议,TCP是Transmission Co

3、ntrol Protocol的缩写,译为传输控制协议 面向连接、端对端(进程对进程)、全双工且能连续传送字节流的报文和高可靠性是TCP的主要特色 功能涉及到可靠性从出错(检验错、丢失、重复或无序接收)恢复到有序递交;以及相关的流量控制、多路复用、连接控制、拥塞避免、优先级与安全等诸多方面,套接字与 TCP 连接,套接字(socket)是包括了主机的IP地址和该进程的通信端口的一种标识,这两个成分使套接字能唯一地标识出网上某处的特定通信进程 一对套接字指明了通信的一对应用进程,也就确定了一个 TCP 连接,TCP报文格式,IP报文格式,DP报文格式,UDP端口与TCP端口相互独立,计算机端口,计

4、算机“端口”是英文port的义译,可以认为是计算机与外界通讯交流的出口。其中硬件领域的端口又称接口,如:ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区。也称为逻辑意义上的端口,一般是指TCP/IP等协议中的端口,端口号的范围从0到65535.,端口的分类,按端口号分布划分 (1)系统端口/知名端口(Well-Known Ports) 知名端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给

5、一些服务。比如21端口分配给FTP服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等。 (2)动态端口(Dynamic Ports) 动态端口的范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如1024端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。,端口的分类,按协议类型划分 按协议类型划分,可以分为TCP、UDP、IP和ICMP(Int

6、ernet控制消息协议)等端口。下面主要介绍TCP和UDP端口: (1)TCP端口 TCP端口,即传输控制协议端口,需要在客户端和服务器之间建立连接,这样可以提供可靠的数据传输。常见的包括FTP服务的21端口,Telnet服务的23端口,SMTP服务的25端口,以及HTTP服务的80端口等等。 (2)UDP端口 UDP端口,即用户数据报协议端口,无需在客户端和服务器之间建立连接,安全性得不到保障。常见的有DNS服务的53端口,SNMP(简单网络管理协议)服务的161端口,QQ使用的8000和4000端口等等。,基于Socket的网络编程,下面的例子演示一个简单的服务器与客户的交互,即服务器等待

7、,客户访问,相互通一次信息.,8.5 Socket,. 8.5 Socket,创建服务器(端口号),定义数据成员,服务器等待 网络连接,建立socket流,读客户 端信息,向用户发出一个字符串,创建Socket实例,定义数据成员,建立socket流,读socket流 (接收并显示),送用户名给 服务器,关闭流,waiting for user, 1111,1111,login:,connetcting client.,java,提示用户登录成功,读socket流,User :java,Login successful,基于Socket的网络编程,Socket类的网络编程特点

8、Socket类处于应用层,无需考虑技术细节 利用Socket类进行网络通讯的基本步骤: 创建服务器端,等待连接 创建客户端,向服务器端发送请求 在客户端和服务器端建立双向连接通道 服务器和客户端都可以通过这条通道向对方发送消息,二者的地位是相等的,基于Socket的网络编程,Socket类的网络编程特点 在网络程序中,存在很多等待过程 服务器端等待客户端的连接 连接上的两端相互等待对方发送数据 程序在等待时不能响应用户的动作,使得单线程网络程序往往处于类似死机的状态 因此,网络程序一般都是多线程程序 后台线程等待网络消息 前台线程处理用户动作,基于Socket的网络编程,Socket类的编程步

9、骤 建立服务器端: 建立服务器端对象,给出端口号,服务器端在这个端口等待客户端的连接 调用accept函数监听端口,程序会停止在这里,一直等待客户端的连接 当客户端连接到该端口之后,accept函数将建立一个Socket类,用于与客户端的通讯,基于Socket的网络编程,Socket类的编程步骤 ServerSocket类会抛出IOException异常,必须用try . catch结构捕获该异常 建立服务器端的代码示例: try serverSocket = new ServerSocket(4444); Socket connSocket = serverSocket.accept();

10、catch (IOException e) System.out.println(无法监听端口4444.); System.exit(-1); ,基于Socket的网络编程,Socket类的编程步骤 建立客户端的步骤: 创建一个Socket对象,对象构造函数的两个参数分别为服务器端的主机名以及端口号 程序将不断连接远程计算机,直到连接成功之后,才继续执行下面的代码 try clientSocket = new Socket(serverhost, 4444); catch (IOException e) System.out.println(无法与服务器建立连接。); System.exit(

11、-1); ,基于Socket的网络编程,Socket类的编程步骤 建立连接之后,服务器端和客户端即可对等地利用I/O流发送或者接收信息 发送消息的步骤: 获得Socket类的输出流 建立一个PrintWriter对象,利用它向网络输出 利用println函数发送消息 PrintWriter out = new PrintWriter( connSocket.getOutputStream(), true); out.println(发送消息);,基于Socket的网络编程,Socket类的编程步骤 接收消息的步骤: 获得Socket对象的输入流 新建一个读数据流的对象,以读取输入流 将接收到的

12、消息保存在缓存中 调用缓存对象的readLine函数读入一行数据 BufferedReader in = new BufferedReader( new InputStreamReader( connSocket.getInputStream(); String inStr = in.readLine();,基于Socket的网络编程,Socket类的编程步骤 BufferedReader对象是一个标准的读入、缓存数据对象。此对象缺省的缓冲区很大,足以放下收到的所有数据 由于不知道通过网络会收到多少数据,因此先将接收到的数据暂存起来,然后再读取 执行readLine函数时,会一直等到接收完一行

13、数据之后才会继续执行下去,服务器-客户端程序,综合性程序 本节我们编写较大、有一定实用性的程序 通过这个程序,两个人可以在网上聊天 程序的基本特征: 图形界面 聊天记录显示 聊天记录保存 这仍然是一个较为简单的程序,目的是演示网络编程的功能,服务器-客户端程序,程序结构 多线程的程序结构 初始化、运行、退出 用户图形界面 服务器/客户端的连接 网络数据的传输与显示 数据保存功能,服务器-客户端程序,多线程的程序结构 网络连接、网络通讯时不可避免地存在等待和延迟的情况,因此采用多线程程序结构 程序中有三个线程: 前台线程响应图形界面的用户动作,发送网络数据,保存对话内容 服务器线程等待网络连接,

14、接收网络数据 客户端线程连接对方主机,接收网络数据 一般情况下,程序中同时有两个线程运行,服务器-客户端程序,初始化 主框架类ChatDemo兼做主程序类,程序由这个类的静态函数main开始运行 创建一个ChatDemo对象,设置主框架的标题、界面风格等 在主框架显示之前,首先弹出输入框,要求输入昵称,如果用户没有输入昵称,则程序自动退出 为退出程序的事件设置处理类,这是一个简单的匿名类,调用confirmClose函数,服务器-客户端程序,初始化 在主界面中添加、显示组件 显示主界面 设置标志变量 创建一个服务器线程,并运行它 退出 程序退出时,一个匿名事件类会自动调用confirmClos

15、e函数,在其中处理退出过程,服务器-客户端程序,退出 confirmClose函数: 检查内存中的改动标志,如果聊天记录在上次保存之后有了改动,则提示用户保存 如果用户选择保存,则打开“保存文件”对话框 如果保存成功,则程序直接退出 如果保存失败,或用户取消保存,则返回主界面 如果用户选择不保存记录,则直接退出 如果没有聊天记录,或者聊天记录在上次保存后没有新的改动,则直接退出,服务器-客户端程序,用户图形界面 程序的主图形界面如下图所示:,服务器-客户端程序,用户图形界面 在addComponent函数中产生 图形界面由5个面板组成 主面板,相当于整个内容窗格的大小,放在内容窗格之上,以放置

16、其它组件 主面板的布局管理器是纵向排列的盒式布局,上下顺序放置4个子面板,服务器-客户端程序,用户图形界面 子面板1:放置两个文本标签,用于显示对方和自己的昵称子面板2:放置了一个文本框和一个按钮,用来发送文字 子面板3:是一个滚动条面板,用来放置文本区域,显示聊天记录 子面板4:放置三个按钮,分别用于连接,保存聊天记录和退出程序,服务器-客户端程序,服务器/客户端的连接 服务器端线程 多线程可避免等待连接造成程序失去响应 190198行代设置服务器端,等待连接 为accept函数设置了等待时间,如果1秒内还没有主机与它连接的话,程序就会自动抛出一个SocketTimeoutException

17、异常 这个异常不做任何事,程序又自动返回accept函数继续等待连接,服务器-客户端程序,服务器/客户端的连接 这样设定的原因是响应客户端线程 本程序是对等式连接,在等待别人连接时,也可以调用客户端线程主动连接其他人 如果主动连上了其他人,则等待的服务器端应当停止,不再接受连接 服务器端在等待时间结束时判断客户端是否已经连接成功,如果连接成功,则自动退出服务器端线程,服务器-客户端程序,服务器/客户端的连接 客户端线程 231243行代码是客户端的连接代码 当用户点击“连接”按钮时,自动启动客户端程序,连接其他主机 根据网络速度的不同,连接时间会有长短差别,因此客户端程序也放在单独的线程中,服

18、务器-客户端程序,服务器/客户端的连接 无论服务器端还是客户端线程,当连接成功后,都自动转入等待数据接收的状态 服务器端: 创建BufferedReader对象,读取对方姓名,发送自己的姓名,最后进入等待读取数据阶段 客户端: 创建BufferedReader对象,发送自己的姓名,读取对方姓名,最后进入等待读取数据阶段,服务器-客户端程序,网络数据的传输与显示 数据发送功能: 用户在文本框中输入文字,点击“发送”按钮,即可将文字发送给对方 发送数据时调用sendMessage函数 由于发送时间比较短,因此没有开单独的线程发送,就在前台线程中发送 发送时会有短暂的失去响应现象,但用户一般感觉不到,服务器-客户端程序,网络数据的传输与显示 数据发送功能: 首先判断程序是作为服务器端还是客户端,以确定通过哪个对象发送数据 创建一个PrintWriter对象发送数据 调用addText函数在文本区域中显示刚才发送的文字内容 写完文字以后,除了点击“发送”按钮以外,直接按回车也会调用同样的函数发送,服务器-客户端程序,网络数据的传输与显示 数据接收功能: 服

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论