14第十四章网络编程
- 格式:pdf
- 大小:263.19 KB
- 文档页数:26
1Java 编程基础——网络编程2第十四章网络编程目标:本章旨在向学员介绍本章旨在向学员介绍::网络基础知识OSI 模型及IP 地址和端口号。
Java Socket 编程编程。
包括包括::Socket 基础基础,,UDP Socket 编程编程,,TCP Socket 编程。
基于多线程的Socket 编程编程。
多线程应用实例多线程应用实例。
时间时间::学时教学方法教学方法::本章要点•网络基础•IP 地址和端口号•Socket 基础•TCP Socket 编程•基于多线程的Socket 编程•基于NIO 非阻塞的Socket 编程(不要求)网络应用•网络就是计算机(想象一下今天假如突然没有网络……)•Socket 提供了两台计算机之间进行通讯的机制网络基础网络基础((1)•网络间的数据交换依赖于网络协议。
–所谓网络协议,就是网络间计算机连接的各种规范。
–它对于网络间交换数据的双方来说正如我们日常交流中所用的语言。
(上海话,广东话……)•在OSI7层模型中,网络层关注的是网络间的数据交换;而传输层关注的是可靠的透明的数据传输。
•我们常说的TCP/IP 协议,主要是传输层和网络层的实现,而更高端的协议(ftp,telnet 等)都是在TCP/IP 协议的基础上的。
网络基础网络基础((2)•TCP 协议是端对端的可靠传输协议。
–解决的是数据的传输,实现的层是传输层。
–可靠传输包括了数据的丢包重新传输、包的拆解、包的抵达顺序控制、以及链路繁忙时包的处理等。
–该协议保证了数据的完整性和可抵达性,在端对端之间建立的是一个可靠的协议。
•IP 协议是网络上数据传输包的封装协议。
–数据包通过IP 包封装后,数据包上就包含了包的源和目的IP 地址。
–IP 协议是个无连接的不可靠的协议,并不保证数据是否抵达、也不保证传输中是否有内容丢失。
它主要侧重的是网络层的实现。
网络基础网络基础((3)•TCP/IP 协议:–结合了两个网络协议的优点,通过IP 协议把网络上的计算机连接到一起,数据包封装成IP 包传输–同时通过TCP 协议保证了包的完整正确抵达目的地•UDP 协议:(User Datagram Protocal)即:用户数据报协议。
–是一种无连接的,不保证可靠传输的协议。
–UDP 协议适合于广播数据,对于大批量的用户的广播相同的数据,而且可以容忍部分数据丢包。
–UDP 协议相对于TCP 协议的最大优势就是传输性能要高出很多。
视频会议、聊天室等都是UDP 的合适应用场所。
网络基础网络基础((4)•网络分类:–规模和范围:局域网(Intranet ),都市网和广域网(Internet )–网络拓扑结构:星型、总线、环线等–传输介质:双绞线,同轴电缆和光纤等•OSI 网络分层模型–应用层–表示层–会话层–传输层–网络层–数据链路层–物理层网络基础(5)•网络工作模式:–客户机/服务器模式(client /server)–浏览器/服务器模式(browser/server)–对等式网络:(Peer-to-Peer)–专用服务器结构(Server-Based)•网络通信协议:–TCP/IP 传输控制协议–UDP 广播型协议–NetBEUI 短小精悍、通信效率高的广播型协议–IPX/SPX 多用在联机游戏中网络基础(6)•关于C/S 架构:客户端与服务器其实只是两个角色名称而已。
–最主要的是服务的职责区分,服务器可以和多个客户端连接,而一个客户端一般情况下只是连接到一台服务器上。
•从连接角度来说,网络连接的双方总是有一个是发起请求连接的,也总是有一个是等待连接请求的;我们一般把等待连接请求的称为服务器,而发起请求的一方称为客户端。
网络基础(7)•当一个网络连接已经建立完毕后,那么,该连接通路上的数据通信就是双向的了。
所以,之后的数据交换过程中双方的角色谁是客户端谁是服务器的区别的意义就不大了。
•其实:服务器等待客户端连接的动作是监听(Listening )是否有来自客户端的连接请求,一旦监听到有客户端的连接请求后,就在服务器端和客户端之间建立一条虚拟的逻辑连接(当然该连接是建立在底层的TCP/IP 协议之上的)。
•以后服务器端和客户端的数据交互就在该连接上进行,在连接保持期间(服务器上连接保持的时间周期称为会话周期),即在会话周期内双方可以持续进行双向的数据交互。
(长连接、短连接)IP 地址和端口号•IP 地址–数字型的,32位(32bit),由4个8位的二进制数组成,每8位之间用圆点隔开。
•端口号(port)–端口是计算机与外界交流的出入口。
–如果IP 地址代表楼号的话,port 代表该楼的哪一户。
它是一个逻辑上的概念,是操作系统上的一种资源。
–注意:一台电脑向外可提供多种服务连接,如果不用port ,那么只是通过IP 地址连接,我们就无法区分要发给该电脑上的哪种服务了。
–客户和服务器必须事先约定所使用的端口。
如果系统两部分所使用的端口不一致,那就不能进行通信。
–常见TCP 端口和对应服务FTP 21 HTTP 80InetAddress•InetAddress 类:–在JAVA 中用来封装计算机的地址;–如:“218.30.66.101”和“ ”这两种格式都可以作为该类对象的构造来源。
•主要方法:–InetAddress.getByName(String s)•该方法内参数支持以上两种格式•用来构造一个新的InetAddress 对象实例–InetAddress.getHostAddress()•返回已知InetAddress 对象的IP 地址字符串Socket 基础•Socket–是为了简化网络编程的复杂度而由开发语言提供的一个网络编程接口。
–可以在网络上建立机器和机器之间可靠的、双向的、持续的、点对点的流式连接。
•形象比喻–Socket 是插座TCP Socket 编程(1)•Java 基于TCP 的Socket 编程提供了两个策略:一个是传统的Socket 编程;一个是基于NIO 的非阻塞的Socket 编程。
我们主要介绍传统的Socket 编程。
•传统实现中,java 提供了两个Socket 相关类:ServerSocket 类和Socket 类;–ServerSocket 在服务器上是用来监听是否有客户端的连接请求(即,婚姻介绍所的介绍人的角色);–Socket 才真正的连接两个终端。
在服务器上和客户端上都有Socket ,客户端的Socket 发送连接请求,而服务器上的Socket 在连接建立后,与客户端的Socket 一起来维持连接。
•可以通过Socket 对象取得输入和输出流对象,然后通过流进行数据的读写。
TCP Socket 编程编程((2)•ServerSocket–等待Socket 连接到一个服务器端–常用构造器:–主要方法:accept()•Socket–连接到服务器端–常用构造器:–主要方法:getInputStream()getOutputStream()ServerSocket(int port);Socket(String host,int port);Socket 通信模型Server Server端端ServerSocket s (port#)s.accept()/s.accept()/等待连接等待连接SocketOutputStreamInputStreamsocket.close()Client Client端端Socket (host, port #)(试图连接试图连接))OutputStream socket.close()InputStream程序示例(服务器端)JJServer.java import java.io.*;import .*;public class Server {public static void main(String args[]){ServerSocket server;try {server = new ServerSocket(1234);Socket sk = server.accept();BufferedReader br = new BufferedReader (new InputStreamReader(sk.getInputStream()));程序示例程序示例((续)System.out.println(br.readLine()+" from client");br.close();server.close();}catch(IOException e){System.out.println(e);}}}程序示例(客户端)JJClient.java import java.io.*;import .*;public class Client{public static void main(String args[]){Socket client;PrintStream ps;try{client = new Socket("localhost",1234);System.out.println("连接成功");ps = new PrintStream(client.getOutputStream());程序示例程序示例((续)ps.println("Hello");client.close();}catch(IOException e){System.out.println(e);}}}基于多线程的Socket 编程•多线程Socket 编程优势:–对于每个客户端的连接请求,服务器产生socket 后都会产生一个单独的线程负责维护该socket 以及同客户端进行通讯,从而提高程序对客户响应效率。
–代码示例见•MThreadServer.java 、JJClient.java练习•做一个客户端和一个服务器端:–由客户端指定一个文件名称;–由服务器端发回此文件的内容;如果文件不存在,则返回“无此文件”的信息给客户端;FileServer.java 、FileClient.java本章小结•掌握Socket 基础•掌握TCP Socket 编程的通用模型•掌握基于多线程的Socket 编程25术语缩语、术语英文全称解释26。