[19/04/14-星期日] 网络编程_java.net包(InetAddress类、InetSocketAddress类、URL类)
一、概念
Java为了可移植性,不允许直接调用操作系统,而是由java.net包来提供网络功能。Java虚拟机负责提供与操作系统的实际连接。
InetAddress
作用:封装计算机的IP地址和DNS(没有端口信息)。
注:DNS是Domain Name System,域名系统。
特点:这个类没有构造方法。如果要得到对象,只能通过静态方法:getLocalHost()、getByName()、 getAllByName()、 getAddress()、getHostName()。
InetSocketAddress
作用:包含IP和端口信息,常用于Socket通信。此类实现 IP 套接字地址(IP 地址 + 端口号),不依赖任何协议。
/***
* IP:定位一个节点(计算机】路由器) 区分小区,定位主机
* 端口(2个字节,16位,0-65535):区分房间,定位具体软件 如: 8080:Tomcat服务器 ,1521:Oracle服务器,3306:mysql服务器
* 查看所有端口:netstat -ano ;查看指定端口:netstat -ano|findstr "8080" ;查看指定进程:talklist|findstr "3272"
* (8080为某个具体端口的名字,3272为某个具体进程的名字)
*
*/
package cn.sxt.net; import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException; public class Test_0413_Net {
public static void main(String[] args) throws UnknownHostException {
//通过getLocalHost()方法创建InetAddress对象,操作本机信息
InetAddress addr = InetAddress.getLocalHost();// host:主机,主人
System.out.println(addr.getHostAddress());//获取本机IP
System.out.println(addr.getHostName());//获得本机名字 //根据域名获得计算机节点信息
InetAddress addr2 = InetAddress.getByName("www.baidu.com");
System.out.println(addr2.getHostAddress()); // 返回百度服务器的IP:220.181.112.244
System.out.println(addr2.getHostName());//返回百度的服务器的名字:www.baidu.com //根据IP获得计算机节点信息
InetAddress addr3 = InetAddress.getByName("59.110.14.7");
System.out.println(addr3.getHostAddress()); // 返回sxt服务器的IP:59.110.14.7
System.out.println(addr3.getHostName());//输出ip而不是域名。如果这个IP地址不存在或DNS服务器不允许进行IP地址
//和域名的映射,getHostName方法就直接返回这个IP地址。 //套接字,端口 InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8080);//地址,端口号
InetSocketAddress socketAddress2 = new InetSocketAddress("localhost", 9000);//域名,端口号,localhost 本机域名
System.out.println(socketAddress.getAddress());
System.out.println(socketAddress.getHostName());
System.out.println(socketAddress.getPort());//获得端口号 System.out.println(socketAddress2.getAddress());
} }
URL类
/*** 网络3大基石:html、 url、 http
* URD:统一资源名称 如:磁力链接
* URL:统一资源定位符 http://www.baidu.com:80/index.html
* 包含:协议,域名/计算机,端口(默认80),请求资源
*/
package cn.sxt.net; import java.net.MalformedURLException;
import java.net.URL; public class Test_0414_URL {
public static void main(String[] args) throws MalformedURLException {
URL u = new URL("http://www.google.cn:80/index.html?uname=shsxt&age=18#a");//"?" 参数 标志 , "#" 锚点标志
System.out.println("协议:" + u.getProtocol());//协议:http ,Protocol:协议,草案
System.out.println("主机名:" + u.getHost()); //域名: www.google.cn
System.out.println("端口:" + u.getPort()); //端口号:80
System.out.println("请求资源:" + u.getFile()); // 端口号后面,锚点前的所有内容:index.html?uname=shsxt&age=18
System.out.println("路径:" + u.getPath()); // 端口号后面,参数前的所有内容 index.html System.out.println("参数部分:" + u.getQuery());//参数内容: uname=shsxt&age=18 Query:查询,询问
System.out.println("锚点部分:" + u.getRef());//锚点内容: a System.out.println("获取与此url关联的协议的默认端口:" + u.getDefaultPort()); URL u1 = new URL("http://www.abc.com/aa/");
URL u2 = new URL(u, "2.html"); // 相对路径构建url对象
System.out.println(u2.toString()); // http://www.abc.com/aa/2.html } }
/***
* 模拟网络爬虫 模拟浏览器
*/
package cn.sxt.net; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; import javax.net.ssl.HttpsURLConnection; public class Test_0414_Spider {
public static void main(String[] args) throws Exception {
//获取url
//URL url=new URL("https://www.jd.com"); URL url=new URL("https://www.dianping.com");
HttpURLConnection con=(HttpURLConnection)url.openConnection();//应对网站的反爬的办法
con.setRequestMethod("GET");//从服务器请求数据 ,模拟浏览器的get请求
con.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"); //下载资源
//InputStream iStream=url.openStream();
BufferedReader bReader=new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF-8"));
String msg=null;
while ((msg=bReader.readLine())!=null) {
System.out.println(msg); }
bReader.close();
//分析 } }
[19/04/14-星期日] 网络编程_java.net包(InetAddress类、InetSocketAddress类、URL类)的更多相关文章
- 网络编程(一)——InetAddress
网络编程(一)--InetAddress InetAddress类在java中代表的是IP地址,它有两个子类分别是Inet4Address和Inet6Address,其中Inet4Address代表的 ...
- Java 网络编程(四) InetAddress类
链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951895.html Java 网络编程(四) InetAddress类 InetAdd ...
- Python之路 - 网络编程之粘包
Python之路 - 网络编程之粘包 粘包
- java网络编程(2)InetAddress 类及udp协议
InetAddress 类 JDK中为开发网络应用程序提供了java.net包,该包下的类和接口差点儿都是为网络编程服务的. InetAddress:用于描写叙述IP地址的对象 InetAddress ...
- 2015/12/14 Python网络编程,TCP/IP客户端和服务器初探
一直不是很清楚服务器的定义,对于什么是服务器/客户端架构也只有一个模糊的感觉.最近开始学习,才明白一些什么服务器和客户端的关系. 所谓的服务器,就是提供服务的东西,它是一个硬件或者软件,可以向一个或者 ...
- Java知识回顾 (14)网络编程
本资料来自于runoob,略有修改. 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细 ...
- java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
InerAddress: /**IP地址:在网络上唯一标示一台计算机 * 端口号:标示计算机上不同的应用程序 * java.net.InetAddress类:此类表示互联网协议 (IP) 地址. * ...
- 8-2udp和tcp网络编程以及粘包和解决粘包的方法
一 tcp网络编程 server 端 import socket sk=socket.socket() #实例化一个对象 sk.setsockopt(socket.SOL_SOCKET,socket ...
- Python学习笔记【第十四篇】:Python网络编程二黏包问题、socketserver、验证合法性
TCP/IP网络通讯粘包问题 案例:模拟执行shell命令,服务器返回相应的类容.发送指令的客户端容错率暂无考虑,按照正确的指令发送即可. 服务端代码 # -*- coding: utf- -*- # ...
随机推荐
- Axios的详细配置和相关使用
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. Features 从浏览器中创建 XMLHttpRequests 从 node.js 创建 http ...
- vmware创建centos虚拟机
下载centos 安装之前你需要下载centos镜像:http://mirrors.aliyun.com/ 创建虚拟机 如果还没有安装vmware请参考:https://www.cnblogs.com ...
- springMVC 静态资源加版本号
springMVC 静态资源加版本号 http://blog.csdn.net/zhangt85/article/details/42126275
- Centos的一个find命令配合rm删除某天前的文件
语句写法:find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 例1: 将/usr/local/backups目录下所有10天前带 ...
- PHP获取地址栏传的id值
function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...
- MongoDB 排序文档
sort() 方法 要在 MongoDB 中的文档进行排序,需要使用sort()方法. sort() 方法接受一个文档,其中包含的字段列表连同他们的排序顺序. 要指定排序顺序1和-1. 1用于升序排列 ...
- Qt Quick程序的发布
要将程序发布出去,首先需要使用release方式编译程序,然后将生成的.exe可执行文件和需要的库文件发在一起打包进行发布. 要确定需要哪些动态库文件,可以直接双击.exe文件,提示缺少那个dll文件 ...
- linux 查看在线服务进程
输入命令:netstat -ltunp 注意,这个-与l之间是没有空格的 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就 ...
- Two ways to assign values to member variables
setXxx()方法,带参数的构造方法.类名作为形式参数,其实里面需要传入一个该类的对象.类名作为返回值,其实返回的是一个该类的对象.
- this keyword details
学生类: package com.itheima_07; /* * 学生类 * * 起名字我们要求做到见名知意. * 而我们现在的代码中的n和a就没有做到见名知意,所以我要改进. * * 如果有局部变 ...