Java复习——第二章 网络编程(1)

第二章 网络编程

网络编程基础

1.TCP/IP基本概念:

计算机网络

通过一定的物理设备将处于不同位置的计算机连接起来组成网络

  • 网络最主要的作用在于共享设备和传输数据
  • 无论是共享或传输数据,务必需要保证准确地匹配目的主机
IP地址和域名:(主机识别)
  • 为了准确的定位目标主机,网络中的每个设备都会有一个唯一的数字标识(网络设备的IP地址)

    — IP地址,是网络中资源共享、数据传输的依据

    — 想查找当前局域网内打印及,可通过10.7.10.200精准匹配

  • 由于IP地址不易记忆,引入网络域名来确认IP地址(域名www.baidu.com相对于119.75.218.77来说,更容易记忆)

端口:(应用程序)

主机端口精确地确定客户访问的是主机的哪一个应用程序

  • 在一台主机上,应用程序可以占用任何一个端口号;一旦应用程序占据这个端口号,其它应用将不能再占用该端口
  • 在主机中,端口号1~1024是系统保留端口号,用来为常用的网络服务程序所占用。用户自定义应用程序,最好占用其它端口号
    例如:HTTP服务默认占用80端口,FTP服务占用21端口,SMTP服务占用25端口等
TCP/UDP协议

确定好目标主机和应用程序之后,就可以进行网络传输。网络传输过程中,数据的传递有两种最常见的形式:

1.TCP传输控制协议:
  • 是一种面向连接的、可靠的、基于字节流的传输层通信协议

  • 需要首先在网络两端建立安全连接,再进行数据传输,确保网络双方完整无误地传输数据

2.UDP用户数据报协议:
  • 是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务

  • 无需建立网络双方连接,直接发送数据包(包含目的地址信息),可能因为网络问题导致数据传输失败等问题,但是传输速度很快,常用于局域网中传输数据。


2.网络编程简介

网络编程

是指通过编程方式实现两个(或多个)设备之间的数据传输。

  • 网络编程是基于“请求-响应”模式的:网络中A端发出请求,B端接收请求后响应A端的请求。
  • “请求方”:客户端;“响应方”:服务器端
  • 网络编程在客户端和服务器端之间传输数据采用TCP方式或UDP方式
网络编程开发模式:
- 客户端/服务器端(C/S模式):

对于不同的服务器端程序建立不同的客户端程序

  • C/S模式应用程序的开发包括开发客户端应用程序和服务器端应用程序

  • 客户端应用程序开发步骤:

    1.客户端建立与服务器端的连接(通过IP和端口确定服务器端程序)

    2.客户端封装请求数据,发送给服务器端

    3.客户端获得服务器端响应数据,解析并处理数据

    4.客户端关闭网络连接

  • 服务器端应用程序开发步骤:

    1.服务器端监听特定端口

    2.服务器端接收客户端连接

    3.服务器端接收客户端请求数据,解析并处理请求数据

    4.服务器端封装响应数据,发送给客户端

    5.服务器端关闭网络连接

-浏览器/服务器端模式(B/S模式):

对于不同的服务器端程序使用统一的“客户端”(即浏览器)即可

  • B/S模式应用程序开发,只需要开发服务器端应用程序即可
  • 由于客户端使用浏览器访问,服务器端应用程序本质上属于Web应用程序
  • 浏览器和服务器通信协议采用HTTP协议
- Java网络编程核心类
  • java.net.:网络类包,涵盖常用网络操作类*
  • java.io.:数据消息传输包,在网络双方进行数据传递需要使用该包中的类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OaF5LR5p-1686968325675)(C:\Users\wuruoheng\AppData\Roaming\Typora\typora-user-images\image-20230617095946138.png)]


3.URL及应用

  • 使用Socket进行网络编程,从网络传输层角度进行分析,适用于绝大多数网络连接方式;但是需要开发人员熟练掌握网络传输、网络协议等基础知识,开发难度较大

  • 在Java语言中,提供了一组URL处理类,封装了Socket编程技术的实现细节,用来方便开发人员进行网络连接、网络数据传输等常用的网络任务

    • 直接使用URL类,可以方便地处理各种常见协议的网络连接
    • 使用URL类进行网络连接,相当于直接进行远程输入/输出流操作,只需开发人员熟练掌握常用IO操作即可,大大降低开发难度
URL类:

统一资源定位符,指向互联网“资源”的指针
常用构造方法:
URL(String url); // 通过给定字符串建立URL对象
常用方法:
InputStream openStream(); // 打开当前URL连接的输入流
URLConnection openConnection(); // 建立URL网络连接

URL myURL = new URL("http://java.sun.com");

String protocal = myURL.getProtocol();
String host = myURL.getHost();
String file = myURL.getFile();
int port = myURL.getPort();
String ref = myURL.getRef();

System.out.println(protocal + ", " + host + ", " + file + ", " + port + ", " + ref);

URLConnection类:

  • 应用程序和 URL 之间的通信链接,用于读取和写入此 URL 引用的资源

  • 对象建立方法:
    -通过URL对象的openConnection()方法创建
    -使用构造方法:URLConnection( URL url)

  • 常用方法:
    -获得响应消息头类方法:getContentType()、getContentLength()、getContentEncoding()、……
    -获得响应消息主体:getContent()
    -获得当前连接输入/输出流对象:getInputStream()、getOutputStream()

    url = new URL("http://");
    // 打开连接
    URLConnection conn = url.openConnection();
    // 得到输入流
    InputStream is = conn.getInputStream();
    // 关于IO流的用法和写法一定要熟悉
    OutputStream os = new FileOutputStream("d:\\baidu.png");
    
    byte[] buffer = new byte[2048];
    int length = 0;
    
    while (-1 != (length = is.read(buffer, 0, buffer.length))) {
    os.write(buffer, 0, length);
    }
    is.close();
    os.close();
    
HttpURLConnection类:特定支持HTTP协议的URLConnection
  • 对象建立方法:
    通过URL对象的openConnection()方法创建,强制转换为目标对象
    使用构造方法:HttpURLConnection( URL url)
  • 常用方法:
    URLConnection类继承的方法
    针对HTTP请求响应消息的特定方法:getRequestMethod()、setRequestMethod()、getResponseCode()、getResponseMessage()、……
URL网络编程实例:文件下载
  • 创建URL对象:URL url = new URL( 文件地址 )
  • 获取服务器端输入流:InputStream is = url.openStream()
  • 文件读写:从输入流中读取字节写入到输出流(文件)中
String sUrl = "http://pic42.nipic.com/20140608/12504116_194242259000_2.jpg";
URL url = new URL(sUrl);	// 创建URL对象
InputStream in = url.openStream();	// 获得网络输入流
// 创建文件输出流
FileOutputStream out = new FileOutputStream(“cat.jpg");
int b;
while ((b = in.read()) != -1) {
	out.write(b);		// 写入文件
}
// 关闭输入输出流
out.close();    
in.close();

URL网络编程实例:获取响应信息
  • 访问网址:http://software.hebtu.edu.cn/
  • 获取该网页的服务器字符编码、文档类型、服务器响应状态码、网页主体等
//创建URL对象
URL u = new URL(http://software.hebtu.edu.cn/);
//进行连接
URLConnection connection = url.openConnection();
HttpURLConnection hc = (HttpURLConnection) connection;
// 获得响应消息头
conn.getContentType();
conn.getContentLength();
conn.getContentEncoding();
// 获得HTTP消息状态码
hc.getResponseCode();
hc.getResponseMessage();
// 获得HTTP响应消息主体
hc.getContent();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值