Java网络编程基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java网络编程基础相关的知识,希望对你有一定的参考价值。

Java SDK提供一些相对简单的API来完成网络功能,这些API存在于java.net包里面,Java所提供的网络功能可大致分为三类。

  • 基于HTTP协议的网络编程:这是三大类功能中最高级的一种。通过URL的网络资源表达方式,很容易确实网络上数据的位置。利用URL和URLConnection,Java程序可以直接读入网络上所放的数据,或者自己的数据传送到网络的另一端

  • 基于TCP/IP协议的Socket编程:可以想象成两个不同的程序通过网络的通道,而这时传统网络程序中的最常用的方法。一般在TCP/IP网络协议的客户服务器软件采用Socket和ServerSocket作为交互的方式

  • 基于UDP协议的Socket编程:Datagram是这些功能中最低级的一种。其他网络数据传送方式都假想在程序执行时,建立一条稳定的通道。电视以Datagram的方式传送数据时,只是把数据的目的地记录在数据包中,然后就直接放在网络上进行传输,系统不保证数据一定能够安全送到,也不能确定什么时候可以送到。

以上3个功能,我们将围绕3类核心进行讲解

  • HTTP协议核心类:包括网页地址类URL、网络连接类URLConnection、HttpURLConnection、JarURLConnection

  • TCP/IP协议核心类:包括IP地址类InetAddress、客户端套接字Socket、服务器端套接字ServerSocket

  • UDP协议核心类:包括数据报类DatagramSocket、数据报套接字DatagramPacket、多播套接字MulticastSocket

1、基于HTTP协议的网络编程

    本节将从URI和URL的网页地址格式讲起,然后分讲解URL、URLConnection等类,演示读取网页内容的方法。主要内容包括以下几项:

  • 网络地址URI→URL

  • URL网页地址类

  • URLConnection网页连接类

  • HttpURLConnection和JarURLConnection

    URI、URL和URN是识别、定位和命名互联网上的资源的标准途径。

    URI:是资源统一标识。它以某种统一的方式标识资源的简单字符串。URI以schema和冒号开头。

    URI不能定位或者读写资源,这是统一的资源定位器(URL)的任务。

    

    URL是一种URI,但是它的大纲组件是已知的网络协议,并且它把URI组件与某种协议处理程序相关联

    URL地址可以包括如下形式的信息:

通常URL可分为几个部分。上面的URL示例指示使用的协议是HTTP协议,并且该信息驻留在一台名为www.socs.uts.edu.au的主机上。主机的信息名称为/MosaiDocs,主机上此名称准确含义取决于协议和主机。该信息一般存储在文件中,但可以随时生成
  • URL可以指定一个端口,它是用于建立到远程主机TCP链接的端口号。

  • 应用程序也可以指定一个相对URL,它只是包含到达相对于另一个URL资源的足够信息

http://java.sum.com/index.html

    URL网页地址类

    URL是UNiform Resource Locator(统一资源定位器)的缩写。类URL代表一个统一资源定位符,它是指向互联网资源的指针。

    URL类为我们提供了不同的构造方法

  1.     根据地址构造URL。public URL(String spec);

  2.     根据协议、主机名、端口和文件创建URL。public URL(String protocol,String host,String port,String file);

  3.     根据协议、主机名、文件创建URL,使用默认80端口。public URL(String protocol,String host,String file);

根据URL实例创建URL。该构造方法用于已经存在的URL对象context床架URL对象。示例如下:public URL(URL context,String spec);

try{
    URL base = new URL("
    URL url3 = new URL(base,"#change"); 
}catch(MalformedURLExceptioin e){
    e.printStackTrance();
}


    

查询URL对象信息

            创建了URL对象,既可以使用该类的方法来操作对象,URL类中一些很基本的方法如下:

  • 获取此URL的授权部分:String getAuthority();

  • 获取此URL的内容:Object getContent();

  • 获取此URL的内容:Object getContent(Class[] classes);

  • 获取与此URL关联协议的默认端口号:int getDefaultPort();

  • 获取此URL的文件名:String getFile();

  • 获取此URL的路径部分:String getPath();

  • 获取此URL的端口号:int getPort();

  • 获取此URL的协议名称:String getProtocol();

  • 获取此URL的查询部分:String getQuery();

  • 获取引用:String getRef();

  • 获取URl的Userinfo:String getUserInfo();


URLConnection网页连接类

    它代表应用程序和URL之间的通信链接。此类的实例可用于读取和写入此URL引用的资源。通常一个到URL的链接通常要几个步骤。

(1)通过在URL在调用openConnection()方法创建链接对象

URL类openConnection()用来返回一个URLConnection对象,它表示到URL所引用的远程对象的连接,其格式如下:

URLConnection openConnection();

        (2)设置请求参数和一般请求参数属性

                    使用以下方法修改该配置参数:

                     void setAllowUserInteraction(boolean allowUserinteraction);//设置允许用户交互

                    void setDoInput(boolean doinput)//设置输入

                    void setDoOutput(boolean doOutput)//设置输出

                    void setIfModifiedSince(long ifmodifiedsince);//设置最新访问时间

                    void setUserCaches(boolean usercaches)//是否启用缓村

(3)使用connect()方法建立到远程对象的实际连接

void connection();//打开到此URL引用的资源的通信链接

(4)在建立到远程对象的链接之后,一下方法用于访问头字段和内容:

Object getContent();//获取此URL链接的内容

某些头字段需要经常访问,使用如下方法:

  • String getHeaderField(int n);//返回第n个头字段的值

  • String getHeaderField(String name);//返回指定的头字段的值

  • String getContentEncoding();返回content-encoding头字段的值

  • int getContentLength();返回content-length头字段的值

  • String getContentType();返回content-type头字段的值

  • long getDate();返回date头字段的值

代码示例

import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

public class TestNet {

	public static void main(String[] args) {
		// 演示URL
		try {
			//根据地址创建URL
			URL url = new URL("http://www.360doc.com/content/14/0908/10/8358419_407786658.shtml");
			//取得URLConnection
			URLConnection conn = url.openConnection();
			//打开连接
			conn.connect();
			//取得属性
			System.out.println(conn.getContentLength());
			System.out.println(conn.getContentType());
			System.out.println(conn.getDate());
			System.out.println(conn.getExpiration());
			System.out.println(conn.getLastModified());
			//获取URL
			//读取网页数据
			int e;
			InputStream is = conn.getInputStream();
			while((e = is.read()) != -1){
				System.out.print((char) e);
			}
			is.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

}



本文出自 “阿酷博客源” 博客,请务必保留此出处http://aku28907.blog.51cto.com/5668513/1774561

以上是关于Java网络编程基础的主要内容,如果未能解决你的问题,请参考以下文章

JSP编程专题1之JSP基础

Java语言基础之方法的设计

20155307刘浩《网络对抗》逆向及Bof基础

JSP基础

20155311高梓云《网络对抗》逆向及Bof基础

20145301赵嘉鑫《网络对抗》逆向及Bof基础