Skip to content

Commit 8132928

Browse files
committed
updates
1 parent dc8a47b commit 8132928

6 files changed

Lines changed: 167 additions & 12 deletions

File tree

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
![](assets/note.jpg)
44

5-
> 十年生死两茫茫,不思量,自难忘,华年短暂,陈辞岁月悠悠伤,
6-
> 满腔热血已芜荒,展未来,后生强,战战兢兢,如履薄冰心彷徨,
5+
> 十年生死两茫茫,不思量,自难忘,华年短暂,陈辞岁月悠悠伤,
6+
> 满腔热血已芜荒,展未来,后生强,战战兢兢,如履薄冰心彷徨,
77
> 青丝化雪、鬓角成霜,已是英雄迟暮,人生怎慷慨激昂?
88
99
## GitHub托管主页
@@ -83,6 +83,7 @@
8383

8484
* [第8章 网络编程](第8章%20网络编程/README.md)
8585
* [网络编程](第8章%20网络编程/网络编程.md)
86+
* [写给那些让我糊里糊涂的HTTP、TCP、UDP、Socket](第8章 网络编程/写给那些让我糊里糊涂的HTTP、TCP、UDP、Socket.md)
8687

8788
* [第9章 反射机制](第9章%20反射机制/README.md)
8889
* [类加载器](第9章%20反射机制/类加载器.md)
@@ -110,7 +111,7 @@
110111
- Email:<815712739@qq.com>
111112
- CSDN博客:[Allen Iverson](http://blog.csdn.net/axi295309066)
112113
- 新浪微博:[AndroidDeveloper](http://weibo.com/u/1848214604?topnav=1&wvr=6&topsug=1&is_all=1)
113-
- GitHub:[JackChen1999](https://github.com/JackChen1999)
114+
- GitHub:[JackChan1999](https://github.com/JackChan1999)
114115
- GitBook:[alleniverson](https://www.gitbook.com/@alleniverson)
115116

116117
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

SUMMARY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181

8282
* [第8章 网络编程](第8章 网络编程/README.md)
8383
* [网络编程](第8章 网络编程/网络编程.md)
84-
84+
* [写给那些让我糊里糊涂的HTTP、TCP、UDP、Socket](第8章 网络编程/写给那些让我糊里糊涂的HTTP、TCP、UDP、Socket.md)
8585
----
8686

8787
* [第9章 反射机制](第9章 反射机制/README.md)

第7章 IO流/常用IO流.md

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55

66
## 1.2 数据输入流
77

8-
1、DataInputStream:数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。
8+
1、DataOutputStream:数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。
99

1010
2、构造方法
1111
DataOutputStream(OutputStream out) :创建一个新的数据输出流,将数据写入指定基础输出流。
1212

1313
## 1.3 数据输出流
1414

15-
1、DataOutputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
15+
1、DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
1616

1717
2、构造方法
1818
DataInputStream(InputStream in) :使用指定的底层 InputStream 创建一个 DataInputStream。
@@ -95,6 +95,29 @@ public class DataStreamDemo {
9595
运行结果:
9696

9797
![](http://img.blog.csdn.net/20150812193046398?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
98+
99+
HttpURLConnection设置请求参数
100+
101+
```java
102+
protected void setRequestParams(HttpURLConnection connection, Request<?> request)
103+
throws ProtocolException, IOException {
104+
Request.HttpMethod method = request.getHttpMethod();
105+
connection.setRequestMethod(method.toString());
106+
// add params
107+
byte[] body = request.getBody();
108+
if (body != null) {
109+
// enable output
110+
connection.setDoOutput(true);
111+
// set content type
112+
connection.addRequestProperty(Request.HEADER_CONTENT_TYPE, request.getBodyContentType());
113+
// write params data to connection
114+
DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream());
115+
dataOutputStream.write(body);
116+
dataOutputStream.close();
117+
}
118+
}
119+
```
120+
98121
# 2. 内存操作流
99122

100123
## 2.1 概述
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
## 写给那些让我糊里糊涂的HTTP、TCP、UDP、Socket
2+
3+
先来一个讲TCP、UDP和HTTP关系的,注意红色mark的部分
4+
5+
1、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
6+
7+
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
8+
在传输层中有TCP协议与UDP协议。
9+
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
10+
因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。
11+
12+
2、HTTP协议是建立在请求/响应模型上的。首先由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,请求中包含请求方法、URI、协议版本以及相关的MIME样式的消息。服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息。
13+
14+
HTTP/1.0为每一次HTTP的请求/响应建立一条新的TCP链接,因此一个包含HTML内容和图片的页面将需要建立多次的短期的TCP链接。一次TCP链接的建立将需要3次握手。
15+
16+
另外,为了获得适当的传输速度,则需要TCP花费额外的回路链接时间(RTT)。每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数据,只是保证链接的可靠性,因此HTTP/1.1提出了可持续链接的实现方法。HTTP/1.1将只建立一次TCP的链接而重复地使用它传输一系列的请求/响应消息,因此减少了链接建立的次数和经常性的链接开销。
17+
18+
3、结论:虽然HTTP本身是一个协议,但其最终还是基于TCP的。不过,目前,有人正在研究基于TCP+UDP混合的HTTP协议。
19+
20+
4、Socket是什么呢?
21+
22+
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
23+
24+
![](http://images.cnblogs.com/cnblogs_com/goodcandle/socket2.jpg)
25+
26+
## [socket、tcp、udp、http 的认识及区别](http://www.cnblogs.com/chengzhengfu/p/4584510.html)
27+
28+
### 1. 先来一个讲TCP、UDP和HTTP关系的
29+
30+
#### 1.1 TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
31+
32+
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层中有TCP协议与UDP协议。
33+
34+
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
35+
36+
因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。
37+
38+
#### 1.2 HTTP协议是建立在请求/响应模型上的。
39+
40+
首先由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,
41+
42+
请求中包含请求方法、URI、协议版本以及相关的MIME样式的消息。
43+
44+
服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息。
45+
46+
HTTP/1.0为每一次HTTP的请求/响应建立一条新的TCP链接,
47+
48+
因此一个包含HTML内容和图片的页面将需要建立多次的短期的TCP链接。
49+
50+
一次TCP链接的建立将需要3次握手。
51+
52+
另外,为了获得适当的传输速度,则需要TCP花费额外的回路链接时间(RTT)。
53+
54+
每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数据,只是保证链接的可靠性,因此HTTP/1.1提出了可持续链接的实现方法。
55+
56+
HTTP/1.1将只建立一次TCP的链接而重复地使用它传输一系列的请求/响应消息,因此减少了链接建立的次数和经常性的链接开销。
57+
58+
#### 1.3 结论
59+
60+
虽然HTTP本身是一个协议,但其最终还是基于TCP的。不过,目前,有人正在研究基于TCP+UDP混合的HTTP协议。
61+
62+
Socket是什么呢?Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,
63+
64+
Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,
65+
66+
对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
67+
68+
![HTTP、TCP、UDP、Socket](http://images.cnblogs.com/cnblogs_com/goodcandle/socket2.jpg)
69+
70+
71+
72+
### 2. TCP、UDP、HTTP、SOCKET之间的区别
73+
74+
TCP和UDP:传输层协议;
75+
76+
HTTP:应用层协议;
77+
78+
SOCKET:TCP/IP网络的API。
79+
80+
TCP/IP代表传输控制协议/网际协议,指的是一系列协议。
81+
82+
TCP和UDP使用IP协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。
83+
84+
TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。
85+
86+
TCP和UDP是FTP、HTTP和SMTP之类使用的传输层协议。
87+
88+
虽然TCP和UDP都是用来传输其他协议的,它们却有一个显著的不同:TCP提供有保证的数据传输,而UDP不提供。
89+
90+
这意味着TCP有一个特殊的机制来确保数据安全的不出错的从一个端点传到另一个端点,而UDP不提供任何这样的保证。
91+
92+
HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。
93+
94+
客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。
95+
96+
记住,需要IP协议来连接网络;TCP是一种允许我们安全传输数据的机制,使用TCP协议来传输数据的HTTP是Web服务器和客户端使用的特殊协议。
97+
98+
Socket 接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,用以开发TCP/IP网络上的应用程序。
99+
100+
### 3. socket、tcp、udp、http 的认识及区别
101+
102+
网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
103+
IP 协议对应于网络层,TCP协议对应于传输层,HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用。
104+
105+
可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据
106+
socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),
107+
通过Socket,我们才能使用TCP/IP协议。
108+
109+
实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。
110+
所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,
111+
从而形成了我们知道的一些最基本的函数接口,比如create、 listen、connect、accept、send、read和write等等
112+
实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,
113+
而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口
114+
115+
#### TCP连接的三次握手
116+
117+
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
118+
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
119+
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
120+
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据
121+
断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”
122+
TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,
123+
但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;
124+
而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,
125+
发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议
126+
也正由于上面的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。
127+
所以采用TCP传输协议的MSN比采用UDP的QQ传输文件慢,
128+
但并不能说QQ的通信是不安全的,因为程序员可以手动对UDP的数据收发进行验证,
129+
比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,
130+
即使是这样,UDP因为在底层协议的封装上没有采用类似 TCP的“三次握手”而实现了TCP所无法达到的传输效率。
131+

第8章 网络编程/网络编程.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,10 @@ TCP建立连接,形成传输数据的通道;在连接中进行大数据量
150150

151151
UDP和TCP的特点
152152

153-
- UDP:面向无连接;不可靠;速度快;将数据封包传输,数据包最大64k
154-
举例:聊天留言,在线视频,视频会议,发短信,邮局包裹。
155-
- TCP:面向连接;安全可靠效率稍低;通过三次握手确保连接的建立。
156-
举例:下载,打电话,QQ聊天(你在线吗,在线,就回应下,就开始聊天了)
153+
- UDP:面向无连接;不可靠;速度快;将数据封包传输,数据包最大64k
154+
举例:聊天留言,在线视频,视频会议,发短信,邮局包裹。
155+
- TCP:面向连接;安全可靠效率稍低;通过三次握手确保连接的建立。
156+
举例:下载,打电话,QQ聊天(你在线吗,在线,就回应下,就开始聊天了)
157157

158158
## **2.4 域名解析**
159159
![域名解析](http://img.blog.csdn.net/20150829110653568)
@@ -998,4 +998,4 @@ public class Tools {
998998
```java
999999
URLEncoder.encode();
10001000
URLDecoder.decode();
1001-
```
1001+
```

第9章 反射机制/反射.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ Constructor 提供关于类的单个构造方法的信息以及对它的访问
258258
| getAnnotations() | 获取所有的注解 |
259259
| getDeclaredAnnotations() | 获取方法上说所有的注解 |
260260
| getGenericParameterTypes() | 获取泛型的参数化类型 |
261-
| getModifiers() | 获取方法的权限修饰符,Modifier.PUBLIC |
261+
| getModifiers() | 获取方法的权限修饰符,Modifier.PUBLIC,Modifier.ABSTRACT,Modifier.STATIC |
262262
| getParameterTypes() | 获取方法参数 |
263263

264264
# **10. Field**

0 commit comments

Comments
 (0)