当前位置: 首页 > news >正文

通信协议 http、tcp、udp

目录

1. 五层网络协议

2. http

3. tcp、udp

4. tcp 3次握手、4次挥手

5. socket

6. httpclient 遇到的问题

1. Q: 使用 EntityUtils.toString(responseEntity, "UTF-8") 中文乱码

2. Q: org.apache.http.NoHttpResponseException: 221.6.16.203:8890 failed to respond

3. Q:  java.net.SocketTimeoutException: Read timed out

4. Q: java.net.SocketException: Connect to 218.28.223.245:5500 [/218.28.223.245] failed: Connection timed out

5. Q: java.net.SocketException: Connection reset

6. Q: java.net.ConnectException: Connection refused


1. 五层网络协议

  a. 应用层:收发数据,http、ftp 协议

  b. 传输层:建立连接,tcp、udp 协议

  c. 网络层:ip、arp 协议

  d. 数据链路层

  e. 物理层

2. http

  a. 超文本传输协议,是一种无状态协议,一次请求 一次连接,建立在 tcp 基础之上

3. tcp、udp

  a. tcp:传输控制协议 udp:用户数据包协议

  b. tcp 需要建立连接;稳定可靠

  c. udp 无需建立连接;存在丢包情况,适用 高速传输、时效性较高 场景

4. tcp 3次握手、4次挥手

  a. 3次握手(建立连接)

    a. 主机A 向 主机B 发送 SYN包

    b. 主机B 向 主机A 发送 SYN+ACK包,ACK值为 主机A SYN+1

    c. 主机A 向 主机B 发送 ACK包

  b. 4次挥手(关闭连接)

    a. 主机A 向 主机B 发送 FIN包

    b. 主机B 向 主机A 发送 ACK包,ACK值为 主机A FIN+1

    c. 主机B 向 主机A 发送 FIN包

    d. 主机A 向 主机B 发送 ACK包

5. socket

  a. 套接字,描述ip和port,建立网络连接时使用,通过socket发送请求、应答请求

  b. socket 是对 tcp/ip 封装,是一套编程接口

6. httpclient 遇到的问题

1. Q: 使用 EntityUtils.toString(responseEntity, "UTF-8") 中文乱码

    why:  httpclient 会先根据 entity 获取 ContentType,再从 ContentType 获取 charset

 如果charset为空,它会把传入的 charset 作为 charset,如果传入的charset也为空,它会把服务器默认的 charset 作为 charset

 A:  a. 先用 iso-8859-1 编码,再用 utf-8 解码,new String(EntityUtils.toString(response.getEntity()).getBytes("ISO-8859-1"), "UTF-8")

b.  直接读取流,response.getEntity().getContent()

2. Q: org.apache.http.NoHttpResponseException: 221.6.16.203:8890 failed to respond

    A: 服务器防火墙设置 或 服务器负荷过重,虽接收请求,但没有能力处理请求

3. Q:  java.net.SocketTimeoutException: Read timed out

    A: 获取服务器响应数据超时

4. Q: java.net.SocketException: Connect to 218.28.223.245:5500 [/218.28.223.245] failed: Connection timed out

   A: 建立连接超时,例:网络中断

5. Q: java.net.SocketException: Connection reset

     A: 原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,

         发送的第一个数据包引发该异常(Connect reset by peer)。

         另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。

         简单的说就是在连接断开后 读和写操作引起的

6. Q: java.net.ConnectException: Connection refused

    A: 连接被拒绝,例如:对方服务器关闭

http://www.lryc.cn/news/500599.html

相关文章:

  • Scala的隐式对象和隐式类
  • 【AIGC】2016-ACCV-即时追捕:自然环境下的自动唇音同步
  • 启智畅想集装箱箱号识别算法,2台相机即可实现较高识别率
  • 让IIS支持PUT请求解决IIS里不支持PUT请求的问题405 Method Not Allowed
  • 入门级捡垃圾工作站记录
  • 2024.12.9——攻防世界ics-06
  • 微信小程序介绍-以及写项目流程(重要)
  • 国内国际标准!羊毛衫检测项目、检测要求及标准
  • MySQL知识大总结(进阶)
  • 【C语言】库函数常见的陷阱与缺陷(2):字符串转化函数
  • 渗透测试基础
  • 传奇996_53——后端ui窗口局部刷新
  • C++ constexpr vs const
  • 【达梦数据库】存储过程调用实践案例-select
  • 041_Compare_Matrix_Squre_Sum_in_MATLAB中矩阵平方和的比较
  • TimeXplusplus——提高时间序列数据的可解释性,避免琐解和分布偏移问题的深度学习可解释性的框架
  • 批处理读取文本第n行并赋值给变量?--遍历所有行并赋值给变量数组
  • 嵌入式入门Day26
  • 【Vue3项目实战系列一】—— 从零开始一个vue3项目 vue3+javascript+vite 非常详细 手把手教学
  • Python_Flask04(牛马问答平台01)
  • Java转C之并发和多线程
  • 针对一个系统的权限管理这样的业务场景,使用各设计模式解说
  • Android AppCompatImageView View.Gone状态切换到View.VISIBLE重新layout,Kotlin
  • 在云上轻松部署达梦数据库
  • 什么是厄尔米特(Hermitian)矩阵?
  • React - useActionState、useFormStatus与表单处理
  • v3账号密码登录随机图片验证码
  • 不只是请求和响应:使用Fiddler解读Cookie与状态码全指南(下)
  • java+springboot+mysql游乐园管理系统
  • @RequestBody,getparameter,@RequestParam,@PathVariable之间的区别和联系