用于创建此对象的程序是visio 您的计算机_菜鸟程序员的成长之路

本文详细介绍了网络编程的三要素:IP地址、端口号和通信协议,重点讲解了TCP与UDP的区别,包括TCP的三次握手、高可靠性以及UDP的无连接、不可靠性特点。此外,还探讨了TCP和UDP的数据传递细节,以及涉及的InetAddress、InetSocketAddress、URL等关键类的使用。
摘要由CSDN通过智能技术生成

1.网络编程

(1)网络编程三要素:

1)IP地址:唯一标识网络上的每一台计算机,两台计算机之间通信的必备因素。

2)端口号:计算机中应用的标记(代表一个应用程序),0-1024系统使用或者保留端口,端口占2个字节,所以有效端口0-65535。

3)通信协议:TCP/UDP

(2)IP地址

IP 地址用于标识网络上的唯一一台计算机,共32位,4个8位二进制数组成IP地址分为:IPv4和IPv6

IPv4:“点分十进制表示法”;

IPv6:“十六进制表示法”;

39388acd8c1ab9ad5b80ef42fc2dbce9.png

IP 地址 = 网络 ID+主机 ID

网络 ID:标识计算机或网络设备所有的网段

主机 ID:标识特定的主机或网络设备

fdeab34f0564c860c1156eac44c166e6.png

特殊 IP 地址:

1) 127.0.0.1:本机回环地址,用于本机测试

2) 255.255.255.255:当前子网,一般用于当前子网广播信息

(3)端口号

端口号:虚拟的概念,使用 0-65535 之间的整数,用于标识不同的应用程序每个网络程序都会至少有一个端口号 。

(4)TCP与UDP的区别

1)TCP(transfer control protocol) (打电话)

一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议。

特点 : 面向连接

点到点的通信

高可靠性:三次握手

占用系统资源多、效率低

2) UDP(User DatagramProtocol ) (发短信)

一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

特点 : 非面向连接,传输不可靠,可能丢失

发送不管对方是否准备好,接收方收到也不确认

数据报的大小限制在 64k 内

非常简单的协议,开销小

2.TCP协议数据传递细节

TCP通信原理:

服务器创建 ServerSocket,在指定端口监听并处理请求。

客户端创建 Socket,向服务器发送请求。

f1217df1220b64116d984b6cbdb80e48.png

9de18508658c97253feebc51a945af59.png

3.UDP协议数据传递细节

(1) 不需要利用 IO 流实现数据的传输。

(2) 每个数据发送单元被统一封装成数据包的方式,发送方将数据包发送到网络中,数据包在网络中去寻找他的目的地。

(3) DatagramSocket:用于发送或接收数据包。

(4) DatagramPacket:数据包。

52a31bea005e354849ac4411e140aef4.png

4.InetAddress 类_InetSocketAddress 类

(1)InetAddress 类(封装了ip地址,但不包含端口号)

1)String getHostAddress(); 获得 IP 地址

2) String getHostName(); 获得主机名

3) static InetAddress getByName(String host); 根据主机名获得 IP 地址

import java.net.InetAddress;
import java.net.UnknownHostException;
/**
 * 	获取主机的IP和主机名的方法、
 * 	getHostAddress()获取IP地址
 * 	getHostName()获取主机名
 * 
 * @author ys
 *
 */
public class TestInetAddress {
 public static void main(String[] args) throws UnknownHostException {
		// (1)获取InetAddress的方式
		InetAddress ia = InetAddress.getLocalHost();// 本机
		System.out.println("获取主机的IP地址:" + ia.getHostAddress());
		System.out.println("获取主机的名称:" + ia.getHostName());

		// (2)根据域名得到InetAddress对象
		InetAddress ia2 = InetAddress.getByName("www.jd.com");
		System.out.println("京东服务器的IP地址:" + ia2.getHostAddress());
		System.out.println("主机名称:" + ia2.getHostName());

		// (3)根据IP地址获取一个InetAddress对象
		InetAddress ia3 = InetAddress.getByName("61.135.253.15");
		System.out.println("服务器主机IP:" + ia3.getHostAddress());
		System.out.println("主机名称:" + ia3.getHostName());
		// 如果61.135.253.15IP地址不存在或者DNS(域名解析系统)不允许进行IP地址的和域名的映射
	}
}

(2)InetSocketAddress 类(封装了IP地址加上端口号,用于实现IP套接字地址(IP地址+端口号),用于socket 通信)

1) InetAddress getAddress(); 获取 InetAddress 对象

2) int getPort(); 获取端口号

3) String getHostName(); 获取主机名

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;

public class TestInetSocketAddress {
 public static void main(String[] args) throws UnknownHostException {
		// 创建对象
		InetSocketAddress tsa = new InetSocketAddress("localhost", 9999);
		InetSocketAddress tsa1 = new InetSocketAddress("127.0.0.1", 9999);
		InetSocketAddress tsa2 = new InetSocketAddress("192.168.5.1", 9999);

		InetAddress ia = InetAddress.getByName("192.168.41.131");
		InetSocketAddress tsa4 = new InetSocketAddress(ia, 9999);
		System.out.println("主机名称:" + tsa4.getHostName());
		System.out.println("主机IP地址:" + tsa4.getAddress());
	}
}

5.URL类

(1)URL(uniform resource locator)

统一资源定位符,由4个部分组成:协议、存放资源的主机域名、端口号和资源文件名。

(2)URL类常用方法

1) String getProtocal() 获取此URL的协议名称

2) String getHost() 获取此URL的主机名(如果适用)

3) int getPort() 获取URL的端口号

4) String getFile() 获取此URL的文件名

5) getDefaultPort() 获取与此URL关联协议的默认端口号

6) getPath() 获取此URL的路径部分

import java.net.MalformedURLException;
import java.net.URL;
/**
 * url类中的一些方法,用来获取指定资源的信息
 * 
 * @author ys
 *
 */
public class TestURL {
 public static void main(String[] args) throws MalformedURLException {
		URL url = new URL("https://www.baidu.com/index.html");
		System.out.println("协议名称:" + url.getProtocol());
		System.out.println("主机名称:" + url.getHost());
		System.out.println("端口号:" + url.getPort());
		System.out.println("获取资源路径:" + url.getPath());
		System.out.println("获取资源路径:" + url.getFile());
		System.out.println("获取默认端口号:" + url.getDefaultPort());
	}
}

1a6d88521ca0f3e66f292c228faf56d2.png

7)openStream()方法打开到此URL的连接并返回一个用于从该连接读入的InputStream

可以从指定网址获取字节输入流。可实现从网页爬取信息。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;

public class TestURLOpean {
 public static void main(String[] args) throws IOException {
		/**
		 * 	网络爬虫
		 * (1)从网络上获取资源www.baidu.com 
		 * (2)存储到本地
		 */
		// (1)创建URL对象
		URL url = new URL("https://www.baidu.com");// 主页资源
		// (2)获取字节输入流
		InputStream is = url.openStream();
		// (3)缓冲流
		BufferedReader br = new BufferedReader(new InputStreamReader(is, "utf-8"));
		// (4)存储到本地
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("index.html"), "utf-8"));
		// (5)边读边写
		String line = null;
 while ((line = br.readLine()) != null) {
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		// (6)关闭流
		bw.close();
		br.close();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值