IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Socket通信 -> 正文阅读

[网络协议]Socket通信

首先先了解一些基础知识点
网络协议有几层?
七层
物理层,数据链路层,网路层(路由:数据包),传输层(TCP传输协议与UDP用户数据报协议),会话层,表示层,应用层

IP地址:唯一的标识(为了实现网络中不同终端之间的通信,每个终端都必须有一个唯一的标识)

端口:
(1)用来区分不同的应用程序
(2)端口号的范围065535,其中01023为系统的保留端口,我们的程序尽量不使用这些端口
(3)IP地址和端口号组成了我们的Socket

TCP协议 和 UDP 协议的比较

TCP:传输控制协议
三次握手 :建立一个TCP链接时,需要客户端和服务端总共发送3个包以确定链接
第一次:客户端(client) 发送SYN = 1,seq= 随机J 组成的包发送给服务端(server),client进入SYN_SEN状态

第二次:Server收到数据包后由标志SYN = 1,知道client,请求连接,Server将标志位SYN 和ACK 都设置为1,ack = J + 1,随机产生,随机产生seq = k,并将该数据包发送给client端已确定连接请求

第三次握手:client接收到后,检查ack 是否 J + 1,ACK是否为1,如果正确将ACK 设置为1,ack = k + 1,并将数据包发送给server ,server检查ack是否为k+ 1,如果正确则建立成功,client 和 server进入ESTABLISHED状态

四次挥手 :断开连接需要发送四个包已确定断开,Socket编程中,这一个过程由任意一方发起close
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入 FIN_WAIT_1状态
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同, 一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK 状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。 另外也可能是同时发起主动关闭的情况:

UDP :非连接协议,传输数据之前源端和终端不建立连接,当传送时简单的抓取来自应用程序的数据,并尽可能快的把它扔到网络上。

Java中对网络提供的几个关键的类
InetAddress 类 :用于标识网络上的硬件资源

private static void getInetAddress() throws UnknownHostException {
        //获取本机的inetAddress 对象,该类没有构造方法
        InetAddress inetAddress = InetAddress.getLocalHost();
        //计算机名
        System.out.println("计算机名 :" + inetAddress.getHostName());
        //ip地址
        System.out.println("IP地址:" + inetAddress.getHostAddress());
        //获取字节数组形式的IP地
        byte[] bytes = inetAddress.getAddress();
        System.out.println("字节数组的Ip地址:" + Arrays.toString(bytes));
    }

URL :统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法
构造方法:
public URL (String spec) 通过一个表示 URL 地址的字符串可以构造一个 URL 对象。
public URL(URL context,String spec) 使用基本地址和相对 URL 构造一个 URL 对象。
public URL(String protocol,String host,String file) 使用指定的协议、主机名和文件名创建一个 URL 对象。
public URL(String protocol,String host,int port,String file) 使用指定的协议、主机名、端口号和文件名创建一个 URL 对象。
方法:
public String getProtocol() 获取该 URL 的协议名。
public String getHost() 获取该 URL 的主机名。
public int getPort() 获取该 URL 的端口号,如果没有设置端口,返回 -1。
public String getFile() 获取该 URL 的文件名。
public String getRef() 获取该 URL 在文件中的相对位置。
public String getQuery() 获取该 URL 的查询信息。
public String getPath() 获取该 URL 的路径。
public String getAuthority() 获取该 URL 的权限信息。
public String getUserInfo() 获得使用者的信息。
public String getRef() 获得该 URL 的锚点。

Socket 类:
Socket(InetAddress address, int port)
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
Socket(String host, int port)
创建一个流套接字并将其连接到指定主机上的指定端口号。
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程地址上的指定远程端口。
Socket(String host, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程主机上的指定远程端口。

线程池
创建一个可缓存线程池

ExecutorService  xxx = xecutors.newCachedThreadPool 

作用以及好处:
(1)减少在创建和销毁线程上所花的时间以及系统资源的开销
(2)如果不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存

ExecutorService有如下几个执行方法:

  • execute(Runnable)
  • submit(Runnable)
  • submit(Callable)
  • invokeAny(…)
  • invokeAll(…)

ServerSocket 类 :ServerSocket是等待客户端的请求,一旦获得一个连接请求,就创建一个Socket示例来与客户端进行通信。

ServerSocket server = new ServerSocket(PORT);   //PORT 端口
Socket socket = server.accept();

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:49:22  更:2022-03-03 16:52:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 13:30:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码