URL地址格式排列为:
scheme: //host: port/path。
该地址各个组成部分的含义如下:
Internet资源类型(scheme) :指出WWW客户程序用来操作
的工具。如**“http://”** 表示WWW服务器,"ftp://" 表示FTP服务
器,“gopher://” 表示Gopher服务器,而**“news://”** 表示News
group新闻组。
.
服务器地址(host)指出WWW页面所在的服务器域名或IP地址。
端口(port) :可选项,如果使用默认端口(如http协议的默认端口为80)则可以省略,对非默认端口的访问来说,需给出相应的服务器的端口号。
路径(path) :指明服务器上某个资源的位置(其格式与DOS系统中的格式一样,通常由**“目录/子目录/文件名**这样的结构组成)。与端口一样,路径并非总是需要的,未写路径时,一般访问都是默认的文件,写上了路径,则访问具体的文件。
URL类的路径为: java.net.URL,是一个公有最终类,由该类派生的URL对象,可用于从URL指定的网页下载数据,
URL类的构造方法如下:
public URL(String spec):
创建一个由字符文本指定的定位器。如:
URL url = new URL
( “http://www.baidu.com” );
public URL(String protocol, String host, String file): 通过将URL
字符串、分解成它对应的组成部分,来创建一个URL对象,
如:
URL url = new URL( "http” ,"www.baidu.com“,“index.html” );
public URL(String protocol,String host, int port, String file):
创建一个指定协议、主机、端口和文件名的文件定位器。
如:
URL url = new URL( "http”,“www.baidu.com”,80,“index.html” );
public URL(String protocol,String host, int port, String file,
URLStreamHandler handler):创建一个指定协议、主机、端口、文件名
和的URL流处理器的定位器。handler为null时,表示URL应使用协议的默认流处理程序。如:
URL url = new URL( “http” ,"www.baidu.com, 80,“index.html” , null);
5)public URL(URL context, String spec):
URL url = new URL( “http://www.baidu.com” );
URL index = new URL(url, “index.html” )
//构造URL对象时用到的try-catch异常处理格式
try {
URL url = new URL…);
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
使用URL类对象可以连接、并访问
一个指定的服务器上的资源,在连接到
网络资源后,可以读取和显示URL实例
对象的各类属性,可以使用openStream
()方法读取资源内容,也可以使用URL
Connection类读写URL资源。
1.获取URL对象属性
public String getAuthority():
获取URL对象的权限信息
public Object getContent():
获取URL对象的内容,要处理IOException。
public int getDefaultPort():
获取与此相关的URL协议的默认端口号。
public String getFile():
获取URL的文件名。
public String getHost():
获取URL的主机名。
public String getPath():
获取URL的路径
public int getPort():
获取URL的端口号,如果没有设置端口号,返回-1。
public String getProtocol():
获取URL的协议名
public String getQuery():
获取URL的查询信息
public String getRef():
获取URL的锚点(也称为“参考"点)
public String getUserlnfo():
获取使用者信息
URLConnection的定义为public abstract class URLConnection,
表示Java程序和URL在网络上的通信连接,该类不能被直接实例化,可
以通过调用URL对象上的方法: openConnection()生成对应的实例对
象。URLConnection对象可以向所代表的URL,发送请求和读取URL的
资源。程序设计时常用的是getInputStream()和getOutputStream(),
定义格式为: InputStream getInputStream();和OutputStream get
OutputStream();
通常,使用URLConnection访问URL资源的步骤如下:
1)调用URL类的openConnection方法得到一个URLConnection实例:
URLConnection urlConn = url.openConnection();
2)调用以下方法,设置相关的属性:
setAllowUserInteraction(),设置连接中allowUserInteraction的值,
或是True,则在允许用户交互(例如弹出一个验证对话框)的上下文中,对此URL进行检查;
setDolnput(),设置doInput的值;
setDoOutput(),设置doOutput的值;
setlfModifiedSince(),设置连接中的ifModifiedSince的值,一些协议支持跳过对象的抓取,设置了ifModifiedSince的值后,则不会跳过;
setUserCaches(),设置用户缓存userCaches的值;
setRequestProperty(),设置请求的属性集。
调用connect()方法连接URL资源:
urlConn.connect(); 该方法创建一个、连接指定服务器套装字
的连接,如果尚未建立这样的连接,则打开到此URL弓|用的资源的通信链接。如果在已打开连接的情况下==(此时connected字段的值为true),调用connect方法==,则忽略该调用。
另外这个方法,还可以查询服务器,以获取
相应的头信息(header information) 。
打开连接后,使用getHeaderFieldKey()和getHeaderField()
方法,来枚举出头信息的所有域。也可以使用如下的方法,来查询响
应头域中的内容:
getConnectionEncoding()获取响应信息头的编码信息
getContentLength()获取响应内容的长度
getContentType()获取响应内容的资源类型
getDate()获取当前日期
getExpiration()获取URL请求头中的过期时间
getLastModified()取得资源最后的修改时间
上面的这几个方法,能取得响应头域中的具体的信息,还可以使用
getHeaderFields()方法,返回Map
应信息字段集合,可以通过遍历该方法返回的数据,查看上面各个方法
所查看的内容。
使用getInputStream()方法,访问URL资源数据。
使用getInputStream()方法,将返回一个输入流,这个输入流、和URL类的openStream()方法,返回的输入流是相同的。在连接和处理HTTP服务器、以及处理Http资源时,也可以使用URLConnection的子类
HttpURLConnection来进行处理。
InetAddress类的引|用路径为: java.net.InetAddress,表示互联网协议(IP)地址。
IP地址是使用的32位(IPv4协议使用的地址)或128位(IPv6协议使用的地址)无符号数字,它是一种低级协议,UDP协议和TCP协议,都是在它的基础上构建的。
InetAddress的实例包含IP地址,还可能包含相应的主机名(取决于它是否用主机名构造,或者是否已执行反向主机名解析)。
JavaAPI中该类常用的方法如下:
InetAddress类没有构造函数,因此创建InetAddress类不用构造函数(即不
使用new关键字来创建实例)它的实例对象需要通过方法getByName()、getLocalHost()及getAllByName()来建立。
URL类能实现与服务端的连接这个功能,URLConnection类(或其子类HttpURLConnection)能实现向服务端发送请求、并读取服务端返回的、响应数据的功能,使用InputStream和OutputStream输入与输出流可以解决,对返回的数据的读取与解析功能
,
两台计算机操作系统中的网络连接过程,包括从应用请求(在协议栈的顶部)到网络介质(底部),OSI参考 模型把功能分成七个独立的层次。该模型的体系结构图如下所示:
1 )端系统A的应用层发出一个请求;
2)该请求在端系统A-侧,依次向下层传递请求,并在各个层添加对应层的标志(可以认为是将上一层的信息进行编码),最后到达物理层;
3 )物理层直接面向连接介质,通过高低电平表示的二进制,将请求信息,通过网络连接设备(它包含网络层、数据链路层、物理层),传递到端系统B一侧的物理层中;
4),端系统B的物理层将请求数据依次向上面的层传递,解析并去掉各个层的标志(可以认为是解码),最后到达端系统B的应用层;
5),端系统B的应用层根据请求消息,做出响应,然后再按写前4步相同的过程,把响应数据皮馈给端系统A的应用层;
TCP/IP参考模型,是计算机网络的祖父ARPANET,和其后继的因特网,所使用的参考模型。ARPANET是由美国国防部DoD(U.S.Department of Defense)赞助的研究网络。
TCP/IP模型各层由下到上分别为:网络接口层、Internet层、传输层、应用层:
IP在互联网中,能唯一标识一 台计算机,是每台计算机的唯一标识(身份证) ;网络编程是和远程计算机的通信,所以必须先能定位到远程计算机; IP帮 助解决此问题;一台计算机中可能有很多进程,具体和哪一个进程进行通信,这就得靠端口来识别。
IP和端口能唯一定位到需要通信的进程。这里的IP表示地址,区别于IP议。在OSI体系或TCP/IP体系中,IP协议位于网际层,用来封装IP地址到报文中。
端口号代表了特定的服务,因此必须保证,所请求的端口号,没有被其它的应用程序、或服务所占用。
端口号的范围为0-65535,其中0-1023为默认端口号,已经分配给了特定的应用协议,
如80代表HTTP服务,23代表telnet服务, 21代表FTP服务,25代表smtp服务,53代表dns服务等(计算机中如果没有安装或开启这些服务,则可以使用这些端口,否则不能使用)。
面向连接与面向无连接的区别,主要有如下两条:
(1):面向连接分为三个阶段,第一阶段是建立连接,在此阶段,发出一个建立连接的请求。只有在连接成功建立之后,才能开始数据传输,这是第二阶段。接着,当数据传输完毕,必须释放连接,这是第三个阶段。而面向无连接没有这么多阶段,它直接进行数据传输。
(2):面向连接的通信具有数据的保序性,而面向无连接的通信,不能保证接收数据的顺序、与发送数据的顺序一 致。
传输控制协议(Transmission Control Protocol, TCP),主要负责数据的分组和重组,在ISO/OSI七层网络参考模型标准中,是传输层中的重要协议(传输层还有一个协议是UDP),在实际运行的业界标准,TCP/IP网络参考模型中,它与IP协议组合使用,称为TCP/IP 。
TCP协议是面向连接的协议,适合于对可靠性要求比较高的运行环境,因为TCP是严格的、安全的。它以固定连接为基础,提供计算机之间可靠的数据传输,计算机之间可以凭借连接交换数据,并且传送的数据能够正确抵达目标,传送到目标后的数据,仍然保持数据送出时的顺序。
Socket编程是网络编程的核心内容。
网络上的两个程序,通过一个双向连通的连接,实现数据的访问与交换,双向连通的链路的每一端,称为一个套接字Socket。套接字通常用来实现客户方(请求服务的一方)、与服务方(提供服务的一方)的连接。
在Java环境中,套接字编程主要是指:基于TCP/IP的网络编程,一个套接字
由一个IP地址、和一个端口号唯一 确定。
通信过程为: Server端首先在某个端口,创建一个监听Client
请求的监听服务、并处于监听状态,当Client端向Server端的这个
端口,提出连接请求时,Server端和Client端就建立了一个连接、
和一条传输数据的通道,通信结束时,这个连接通道将被销毁。
服务端使用ServerSocket对象和Socket对象进行处理,客户端使用Socket对象进行处理。
客户端程序必须遵守下面的步骤:
1)建立客户端Socket连接;
2)得到Socket的输入与输出读写流;
3)使用读写流与服务端进行通信;
4)关闭流;
5)关闭Socket.
服务端必须遵守的步骤如下:
1)建立一个ServerSocket并进行监听;
2)使用accept()方法取得新的连接;
3)得到Socket的输入与输出读写流;
4)根据客户端的请求,在已有的协议上,进行通信会话;
5)关闭Socket,关闭TCP连接;
6)回到第二步进行监听,或到第七步结束;
7)关闭ServerSocket。
ServerSocket作在服务端,用来监听指定的端口、并接收客户端的连接请求。ServerSocket的常用构造方法如下:
public ServerSocket(int port) throws IOException: 创建一个具有确定端口的ServerSocket对象。
创建ServerSocket对象的一般格式如下:
try {
ServerSocket serverSocket = new ServerSocket(8888);
} catch (IOException ex) {
ex.printStackTrace();
}
创建了ServerSocket对象后,就可以利用它提供的方法,进行各种操作了,
ServerSocket常用的方法如下:
客户端与服务端建立连接,首先要创建一个Socket对象。其常用的构造方法如下:
public Socket(InetAddres address, int port) throws
IOExcption:创建一个指定的IP地址、指定端口的Socket对象,
address为要连接的、服务器端的IP地址,port为指定的端口。
public Socket(String host, int port)throws UnknownHostException,
lOException:创建一个指定主机,指定端口的Socket对象,host为指定的服务端的、主机名或IP地址字符串,port为指定的端口。
创建Socket对象的一般格式如下:
try {
Socket socket = new Socket
(“127.0.0.1" , 8888);
} catch (IOException ex) {
ex.printStackTrace();
}
创建或获取Socket对象后,可以利用它的方法进行相应的操作,
其常用的方法如下:
用户数据报协议(User Datagram Protocol, UDP)和TCP不同,UDP是一种非持续连接的通信协议,它不保证数据能够正确抵达目标,UDP协
议是一种面向无连接的协议。虽然UDP可能会因网络连接等各种原因,无
法保证数据的安全传送,而且多个数据包抵达目标的顺序,可能和发送时的顺序不同,但是它比TCP更轻量一些,TCP认证会耗费额外的资源,可能导致传输速度的下降。
客户端(发送端)需要经过如下的步骤:
1)创建套接字(socket) ;
2)向服务器发送数据(sendto) ;
3)关闭套接字;
服务端(接收端)按如下步骤进行处理:
1)创建套接字(socket) ;
2)将套接字绑定到一个本地地址和端口上(bind) ;
3)等待接收数据(recvfrom) ;
4)关闭套接字。
常用的构造方法如下:
DatagramPacket(byte[] buf, int length):
创建数据包实例,这个数据包实例,将接收长度为length的数据包;
DatagramPacket(byte[] buf, int length,InetAddress address, int port):
创建数据包实例,用来将长度为length的数据包,发送到address参数指定的地址、和port参 数指定的端口号的主机,length参数必须小于等于buf数组的长度