Java网络编程探究|乐字节
大家好,我是乐字节小乐,上次给大家讲述了Java中的IO流之输出流|乐字节,本文将会给大家讲述网络编程。
主要内容如下:
- 网络
- 网络分层
- IP位置
- 端口port
- 网络编程
一、 网络
1、概念
网络即将不同区域的电脑连接到一起, 组成局域网、城域网或广域网。把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。
2、主要功能
• 资源共享
• 信息传输与集中处理
• 均衡负荷与分布处理
3、网络通信协议
计算机网络中实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传
输控制步骤、出错控制等制定标准。
4、网络通信接口
为了使两个结点之间能进行对话,必须在它们之间建立通信工具(即接口),使彼此之间能进行信息交换。接口包括两部分:
• 硬件装置: 实现结点之间的信息传送;
• 软件装置: 规定双方进行通信的约定协议
二、 网络分层
由于结点之间联系很复杂,在制定协议时,把复杂成份分解成 一些简单的成份,再将它们复合起来。最常用的复合方式是层次方式,即同层间可以通信、上一层可以调用下一层,而与再下一层不发生关系。
1、 通信协议的分层
2、封装
封装:从上往下,加入相关层的协议控制信息
3、拆封
拆封:获取数据,从下往上,去除相关层的协议的控制信息
三、 IP位置
( IP) 是 Internet Protocol 的外语缩写, 网络之间互连的协议也就是为计算机网络相互连接进行通信而设计的协议。 在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守 IP 协议就可以与因特网互连互通。
端口:区分数据流向的软件 0-65535 不要使用 1024 以下的端口 ,每一个协议拥有自己的端口,在同一个协议下端口不能重复 FTP:21 HTTP:80
四、端口:port
端口是虚拟的概念,并不是说在主机上真的有若干个端口。通过端口,可以在一个主机上运行多个网络应用程序。可以类比为:IP 相当于公司,端口相当于公司各部门,URL,相当于各部门的人员。
五、资源的传输协议
TCP:TCP(transfer control protocol) 打电话 面向连接、安全、可靠,效率低
UDP:UDP(UserDatagramProtocol ) 发送短信 非面向连接、不安全、数据可能丢失 、效率高
六、网络编程
1、InetAddress
封装计算机的 ip 地址和 DNS( Domain Name System,域名系统) ,没有端口。
1)、方法
InetAddress.getLocalHost();
InetAddress.getByName("http://www.163.com");
InetAddress.getByName("223.87.1.58")
2) 、方法
getHostAddress() 返回 ip 地址
getHostName() 返回域名|本机为计算机名
2、InetSocketAddress
包含端口,用于 socket 通信的
1) 、获取对象
InetSocketAddress(String hostname, int port)
InetSocketAddress(InetAddress addr, int port)
2) 、方法
getAddress() 返回 InetAddress 对象
getPort() 返回端口
getHostName() 返回域名
3 、URL
1) 、URI(Uniform resource identifier)
统一资源标识符, 用来唯一的标识一个资源。
2) 、URL( Uniform Resource Locator)
统一资源定位器,它是一种具体的 URI 。统一资源定位符,由 4 部分组成:协议 、存
放资源的主机域名、资源文件名和端口号。 URL是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
3) 、网络爬虫原理
public static void main(String[] args) throws IOException {
URL url=new URL("http://www.baidu.com");//主页 默认资源
//获取资源 网络流 可能会出现乱码:1、字节数不够 2、编码解码格式不统一
/*InputStream is=url.openStream();
byte[]flush=new byte[1024];
int len=0;
while(-1!=(len=is.read(flush))){
System.out.println(new String(flush,0,len));
}
is.close();*/
BufferedReader br=new BufferedReader(new InputStreamReader(url.openStream(),"utf-8"));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("baidu2.html"),"utf-8"));
String msg=null;
while((msg=br.readLine())!=null){
//将网络内容下载到本地。然后进行数据分析,建立索引,这也是搜索引擎的第一步。
bw.append(msg);
bw.newLine();//新增方法 插入换行符
}
bw.flush();//强制刷出
bw.close();
br.close();}
4、UDP编程: DatagramSocket DatagramPacket
UserDatagramProtocol,一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。其特点为:非面向连接;传输不可靠;数据可能丢失。
1)、服务器:
①创建服务器 DatagramSocket类 +指定端口
②准备接收容器 字节数组 +封装成DatagramPacket数据包
③接收数据
④分析数据
⑤释放资源
2)、客户端:
①创建客户端 DatagramSocket类 +指定端口
②准备数据 字节数组
③封装成数据包 需要指定包发送的地址+端口 即服务器地与端口
④发送数据
⑤释放资源
5、TCP 编程:ServerSocket Socket
transfer control protocol,一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议的点到点的通信 。TCP 三次握手(Three-way Handshake),类似于拨打电话
1) 、特点
基于 tcp 协议,建立稳定连接的点对点的通信;实时、快速、安全性高、占用系统资源多、效率低;“请求-响应”模式:
a)、客户端:在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client)程序
b)、服务器:第一次通讯中等待连接的程序被称作服务器端(Server)程序
• Socket:发送 TCP 消息
• ServerSocket:创建服务器
套接字是一种进程间的数据交换机制。这些进程既可以在同一机器上,也可以在通过网
络连接的不同机器上。换句话说,套接字起到通信端点的作用。单个套接字是一个端点,
而一对套接字则构成一个双向通信信道,使非关联进程可以在本地或通过网络进行数据
交换。一旦建立套接字连接,数据即可在相同或不同的系统中双向或单向发送,直到其
中一个端点关闭连接
2) 、服务器:
①创建服务器 指定端口
②等待客户端连接
③分析接收数据
3) 、客户端:
①连接服务器: 创建客户端 +指定服务器地址 +端口
②发送数据
乐字节原创,转载请注明出处。
关于网络编程就讲到这里了,更多Java干货请继续关注乐字节。
Java网络编程探究|乐字节的更多相关文章
- java网络编程serversocket
转载:http://www.blogjava.net/landon/archive/2013/07/24/401911.html Java网络编程精解笔记3:ServerSocket详解ServerS ...
- java网络编程socket解析
转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在 ...
- JAVA网络编程【转】出处不详
网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...
- 【Java】Java网络编程菜鸟进阶:TCP和套接字入门
Java网络编程菜鸟进阶:TCP和套接字入门 JDK 提供了对 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protoco ...
- Java 网络编程---分布式文件协同编辑器设计与实现
目录: 第一部分:Java网络编程知识 (一)简单的Http请求 一般浏览网页时,使用的时Ip地址,而IP(Internet Protocol,互联网协议)目前主要是IPv4和IPv6. IP地址是一 ...
- 【转】JAVA 网络编程
网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...
- Java - 网络编程完全总结
本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等,在此基础上,介绍Java中的网络编程. 一.概述 ...
- 【转载】Java 网络编程
本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等,在此基础上,介绍Java中的网络编程. 一. ...
- Java网络编程和NIO详解开篇:Java网络编程基础
Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...
随机推荐
- BAT 定时将多个本地文件同步到共享目录
copy.bat 具体执行脚本,需要修改共享目录访问用户名,密码,同步的文件类型 list.txt 前面为本地文件夹,后面为共享目录,中间以”,”进行分割 附件地址: https://files. ...
- 理解 ES6 语法中 yield* 关键字的作用
在 ES6 中新增了生成器函数的语法,本文解释了与生成器函数有关的 yield* 关键字,及其使用场景. 描述 根据语法规范,yield* 的作用是代理 yield 表达式,将需要函数本身产生(yie ...
- 【模板】最小割树(Gomory-Hu Tree)
传送门 Description 给定一个\(n\)个点\(m\)条边的无向连通图,多次询问两点之间的最小割 两点间的最小割是这样定义的:原图的每条边有一个割断它的代价,你需要用最小的代价使得这两个点不 ...
- Thingsboard Docker关闭后重启服务创建network出错
因为个人想验证一下thingsboard的数据是否是保存在postgres中,就将postgres容器停止,后想重启则无法重启 我干脆将整个系统删除后重新再来一次,在试的时候发现无法重新创建容器 Cr ...
- C# 复制数组容易踩到的坑--引用类型与值类型
原文链接:https://my.oschina.net/u/3744313/blog/1794235 笔者近期做的项目里大量使用了数组,而在使用过程中,笔者曾经遇到了一个比较低级的问题:如何将一个数组 ...
- JWT Claims
JWT Claims “iss” (issuer) 发行人 “sub” (subject) 主题 “aud” (audience) 接收方 用户 “exp” (expiration time) 到 ...
- Check if List<Int32> values are consecutive
Check if List<Int32> values are consecutive One-liner, only iterates until the first non-conse ...
- android studio: 对齐成员变量及链式方法
"File"-"Settings"-"Editor"-"Java"-"Wrapping and Braces& ...
- [转]Android四大核心组件:Activity+Service+BroadcastReceiver+ContentProvider
原文地址:http://c.biancheng.net/view/2918.html Android 作为一个移动设备的开发平台,其软件层次结构包含操作系统 (OS).中间件 (MiddleWare) ...
- markdown2的key
分享一个MarkDown2的授权key 邮箱地址: Soar360@live.com 授权秘钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGIm ...