一、概念

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类)的更多相关文章

  1. 网络编程(一)——InetAddress

    网络编程(一)--InetAddress InetAddress类在java中代表的是IP地址,它有两个子类分别是Inet4Address和Inet6Address,其中Inet4Address代表的 ...

  2. Java 网络编程(四) InetAddress类

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951895.html Java 网络编程(四) InetAddress类 InetAdd ...

  3. Python之路 - 网络编程之粘包

    Python之路 - 网络编程之粘包 粘包

  4. java网络编程(2)InetAddress 类及udp协议

    InetAddress 类 JDK中为开发网络应用程序提供了java.net包,该包下的类和接口差点儿都是为网络编程服务的. InetAddress:用于描写叙述IP地址的对象 InetAddress ...

  5. 2015/12/14 Python网络编程,TCP/IP客户端和服务器初探

    一直不是很清楚服务器的定义,对于什么是服务器/客户端架构也只有一个模糊的感觉.最近开始学习,才明白一些什么服务器和客户端的关系. 所谓的服务器,就是提供服务的东西,它是一个硬件或者软件,可以向一个或者 ...

  6. Java知识回顾 (14)网络编程

    本资料来自于runoob,略有修改. 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细 ...

  7. java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)

    InerAddress: /**IP地址:在网络上唯一标示一台计算机 * 端口号:标示计算机上不同的应用程序 * java.net.InetAddress类:此类表示互联网协议 (IP) 地址. * ...

  8. 8-2udp和tcp网络编程以及粘包和解决粘包的方法

    一  tcp网络编程 server 端 import socket sk=socket.socket() #实例化一个对象 sk.setsockopt(socket.SOL_SOCKET,socket ...

  9. Python学习笔记【第十四篇】:Python网络编程二黏包问题、socketserver、验证合法性

    TCP/IP网络通讯粘包问题 案例:模拟执行shell命令,服务器返回相应的类容.发送指令的客户端容错率暂无考虑,按照正确的指令发送即可. 服务端代码 # -*- coding: utf- -*- # ...

随机推荐

  1. 你所需要的sql数据库资料

     sql语法的特点  1.没有"",所有的字符串都使用''包含  2.它的逻辑相等与赋值运算符一样都是= 如 if 1=1  3.不区别大小写,但是习惯函数上使用大写.所有与数据库 ...

  2. [javaSE] GUI(菜单)

    菜单MenuBar Menu  MenuItem 调用Frame对象的setMenuBar()方法,设置菜单,参数:MenuBar对象 import java.awt.FlowLayout; impo ...

  3. Java中多个集合的交集,并集和差集

    一.交集 java中交集使用 A.retainAll(B) ,交集的结果在集合A中. import org.junit.Test; import java.util.HashSet; import j ...

  4. hdu 3415 Max Sum of Max-K-sub-sequence 单调队列。

    Max Sum of Max-K-sub-sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  5. 线程与全局解释器锁(GIL)

    一.线程概论 1.何为线程 每个进程有一个地址空间,而且默认就有一个控制线程.如果把一个进程比喻为一个车间的工作过程那么线程就是车间里的一个一个流水线. 进程只是用来把资源集中到一起(进程只是一个资源 ...

  6. BZOJ1014: [JSOI2008]火星人prefix(splay 二分 hash)

    题意 题目链接 Sol 一眼splay + 二分hash,不过区间splay怎么写来着呀 试着写了两个小时发现死活不对 看了一下yyb的代码发现自己根本就不会splay.... // luogu-ju ...

  7. chrome devtools的debug相关

    搜索ctrl+p:搜索Sources面板中指定的文件:然后在主窗口文件标签右键选择reveal in navigator可以在目录中显示当前文件.ctrl+f:搜索devtool主显示窗口所在文件的指 ...

  8. WinForm实现Rabbitmq官网6个案例-Routing

    代码: namespace RabbitMQDemo { public partial class Routing : Form { private string exchangeName = &qu ...

  9. Angular入门教程四

    4.8依赖注入DI 通过依赖注入,ng想要推崇一种声明式的开发方式,即当我们需要使用某一模块或服务时,不需要关心此模块内部如何实现,只需声明一下就可以使用了.在多处使用只需进行多次声明,大大提高可复用 ...

  10. LeetCode赛题515----Find Largest Element in Each Row

    问题描述 You need to find the largest element in each row of a Binary Tree. Example: Input: 1 / \ 2 3 / ...