第十五章、网络通信

1、网络编程的基本概念及TCP/IP协议简介

(1)网络通信协议:OSI七层协议:

OSI七层协议体系架构及数据传递方式

TCP/IP四层协议:

2、基于URL的高层次Java网络编程

(1)网络应用定位:

IP地址:标识计算机等网络设备的网络地址。由四个8位二进制数组成。例如:192.168.32.16,  127.0.0.1

域名:网络地址的助记符。例如:www.sohu.com,localhost   (DNS域名解析)

服务类型:应用层提供的网络服务, 例如:http,smtp,ftp

端口号:网络服务的标识号,例如:http端口号为80,ftp端口号为21,端口号范围为:0~65535,其中0~1023为系统保留的端口号

(2)统一资源定位器URL

URL的组成:protocol://resourceName

协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、file等,

资源名(resourceName)指明资源的完整地址,包括域名、端口号、文件名或文件内部的一个引用(锚点)

例如:http://news.hzau.edu.cn/2015/1114/43886.shtml

URL类(java.net包):构造方法:创建URL对象

public URL (String spec)  例如:URL url = new  URL(“http://www.hzau.edu.cn/”);

public URL(URL context, String spec);  例如: URL url1 = new URL(url, “2015/1114/43886.shtml”);

public URL(String protocol, String host, String file) 例如: URL url2 = new URL(“http”,“www.hzau.edu.cn”, “/2015/1114/43886.shtml”);

public URL(String protocol, String host, int port, String file) 例如: URL url3 = new URL(“http”, “www.hzau.edu.cn”, 80, “/2015/1114/43886.shtml”);

解析一个URL对象
生成一个URL对象,并获取它的各个属性    

(2)从URL读取WWW网络资源

当得到一个URL对象后,就可以通过它的方法openStream()读取指定的WWW资源。这个方法与URL代表的服务资源建立连接并返回InputStream类的对象,进而读取数据。

(2)通过URLConnection连接WWW网络资源:不仅能够读取来自服务端的数据,还能向服务端发送数据。

第一步:创建URL对象   URL url =new URL ("http://www.baidu.com/");

第二步:由URL对象获取URLConnection对象   URLConnection con=url.openConnection();

第三步:对输入输出流进行装配,并调用读写方法进行通信 con.setDoOutput(true);      //可以向服务器端写相应的信息

Writer out=new OutputStreamWriter(con.getOutputStream());

out.write(………);   //向服务器发送相应数据

BufferedReader in = new BufferedReader(new  InputStreamReader(con.getInputStream() ,"UTF-8"));

String line=in.readLine();   //从服务器读入一行

3、基于Socket套接字的低层次Java网络编程


(1)两类传输协议:TCP和UDP 

TCP是一种面向连接的保证可靠传输的协议。

TCP三次握手确立连接

(2)Socket通讯:

网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程接口,一个Socket由一个IP地址和一个端口号唯一确定。

Socket编程是低层次网络编程,比基于URL的网络编程提供了更强大的功能和更灵活的控制,但却更复杂一些。

例: 基于Socket的C/S简单通信程序

第一步:创建 客户端 Socket
第二步:服务器端ServerSocket
第三步:对Socket的输入输出流进行读写操作
第四步:关闭Socket

例:支持多客户的client/server程序设计 

服务器主线程
处理客户请求线程
处理客户请求线程

4、基于数据报的低层次Java网络编程

(1)Datagram: 所谓数据报(Datagram)就跟日常生活中的发手机短信一样, 是不能保证可靠寄到的,而面向连接的TCP就好比电话,双方能肯定对方接收到了信息

Datagram通讯对象:DatagramSocket与DatagramPacket

DatagramSocket用于发送或接收数据报,是数据报投递服务的一个发送或接收点

DatagramSocket构造方法:DatagramSocket();     DatagramSocket(int port);

                                            DatagramSocket(int port, InetAddress laddr);

注意DatagramSocket与Socket的区别

DatagramPacket用来表示一个数据报 

构造方法:DatagramPacket(byte buf[], int length);

                  DatagramPacket(byte buf[], int offset, int length);

接收数据报:DatagramPacket packet=new DatagramPacket(buf, length);

                      socket.receive(packet);

构造方法:DatagramPacket(byte buf[],int length, InetAddress addr, int port);

                  DatagramPacket(byte buf[], int offset, int length , InetAddress addr, int port);

发送数据报:DatagramPacket packet=new DatagramPacket(buf, length, address, port);

                      socket.send(packet);

例:基于UDP的客户/服务器通信程序:

客户端
服务器主线程
服务器接收/发送数据报线程
服务器接收/发送数据报线程

TCP与UDP的不同点 :

你可能感兴趣的:(第十五章、网络通信)