1、网络编程的基本概念及TCP/IP协议简介
(1)网络通信协议: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”);
(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是一种面向连接的保证可靠传输的协议。
(2)Socket通讯:
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程接口,一个Socket由一个IP地址和一个端口号唯一确定。
Socket编程是低层次网络编程,比基于URL的网络编程提供了更强大的功能和更灵活的控制,但却更复杂一些。
例: 基于Socket的C/S简单通信程序
例:支持多客户的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的客户/服务器通信程序: