| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> Java网络编程 -> 正文阅读 |
|
[网络协议]Java网络编程 |
一,网络编程入门网络编程: ? ? ? ? 在网络通信协议下,不同计算机上运行的程序,可以进行数据传输 1,网络编程三要素? ? ? ? IP地址 ? ? ? ? ? ? ? ? 设备在网络中的地址,是唯一的标识 ? ? ? ? 端口 ? ? ? ? ? ? ? ? 应用程序在设备中唯一的标识 ? ? ? ? 协议 ? ? ? ? ? ? ? ? 数据在网络中传输的规则,常见的协议有UDP协议和TCP协议 2,IPIP:全称“互联网协议地址”,也称IP地址,是分配给上网设备的数字标签,常见的IP分为 ipv4和ipv6. 计算机通过域名像dns服务器获取ip地址,再通过ip地址访问想要访问的服务器,服务器再把数据展示再浏览器上。 ? ? ? ? (1),ipv4: ? ? ? ? ? ? ? ? ipv4是32bit(4字节)的形式,采用的是点分十进制表示法 ? ? ? ? (2),ipv6: ? ? ? ? ? ? ? ? 由于互联网的蓬勃发展,IP地址的需求量越来越大,ipv4的模式下ip的总数是有限的。 ? ? ? ? ? ? ? ? ipv6,采用126位地址长度,分为8组。采用的是冒分十六进制标识法 ? ? ? ? ? ? ? ? 特殊情况:如果计算出来的16进制表示形式中间有多个连续的0 ? ? ? ? ? ? ? ? 比如:FF01:0:0:0:0:0:0:1101 -------->? FF01::1101 3,IP地址? ? ? ? 常用命令: ? ? ? ? ipconfig:查看本机IP地址 ? ? ? ? ping IP地址:检查网络是否连通 ? ? ? ? 特殊的IP地址:127.0.0.1 :是回送地址也称本地回环地址,可以代表本机的IP地址,一般用来测试使用 4,InetAddress的使用为了方便我们对IP地址的获取和操作,java提供了一个类InetAddress供我们使用 ? ?InetAddress:此类表示Internet协议(IP?)地址 方法:static? InetAddress? getByName(String? host) ;确定主机名称的IP地址,主机名称可以是机器名称也可以是IP地址 ? ? ? ? String? getHostName();获取此IP地址的主机名 ? ? ? ? String? getHostAddress()返回文本显示中的IP地址字符串
?5,端口? ? ? ? 端口:应用程序再设备中的唯一标识 ? ? ? ? 端口号:用两个字节标识的整数,它的取值范围是0~65535. ? ? ? ? ? ? ? ? ? ? ? ? 其中0~1023之间的端口号用于一些知名网络服务或者应用 ? ? ? ? ? ? ? ? ? ? ? ? 我们可以使用的端口号是1024以上的 ? ? ? ? ?注意:一个端口号只能被一个应用程序使用 6,协议? ? ? ? 协议:计算网络中,链接和通信的规则被称为网络通信协议 ? ? ? ? UDP协议: ? ? ? ? 用户数据协议 ? ? ? ? UDP是面向无连接通信协议,速度快,有大小限制一次最多发送64k,数据不安全,易丢失数据。 ? ? ? ? TCP协议: ? ? ? ? 传输控制协议 ? ? ? ? TCP协议是面向链接的通信协议,速度慢,没有大小限制,数据安全 7,小结? ? ? ? 网络编程:就是可以让两台计算机进行数据交互 ? ? ? ? 网络三要素: ? ? ? ? ? ? ? ? IP:设备在网络中唯一的标识 ? ? ? ? ? ? ? ? 端口号:应用程序在设备中唯一的标识 ? ? ? ? ? ? ? ? 协议:数据在传输过程中遵守的规则 二,UDP通信程序1,UDP发送端? ? ? ? 创建发送端的DatagramSocket对象 ? ? ? ? 创建数据,并把数据打包(Datagrampacket) ? ? ? ? 调用DatagramSocket对象的方法发送数据 ? ? ? ? 释放资源
2,UDP接收端? ? ? ? 创建接收端DatagramSocket对象 ? ? ? ? 创建一个箱子,用于接收数据 ? ? ? ? 调用DatagramSocket的方法接收数据并将数据放入箱子中 ? ? ? ? 解析数据包,并把数据在控制台显示 ? ? ? ? 释放资源
?这一点:1,要先运行接收端,在运行发送端 ? ? ? ? ? ? ? ?2,如果接收端在启动之后没有收到数据,那么就会死等(阻塞) ? ? ? ? ? ? ? ? 3,在接收数据的时候,需要调用一个getlength方法,标识接收到了多少字节 3,UDP的三种通信方式? ? ? ? 单播,?组播,广播 UDP通信组播代码实现? ? ? ? 组播地址:224.0.0.0~239.255.255.255 ? ? ? ? ? ? ? ? ? ? ? ? 其中224.0.0.0~224.0.0.255为预留的组播地址 组播发送端
组播接收端
?UDP广播代码实现? ? ? ? 广播地址255.255.255.255 广播发送端
广播接收端(和单播的相同)
三,TCP通信程序TCP通信原理 ? ? ? ? TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Soccket对象 ? ? ? ? 通信之间保证链接已经建立 ? ? ? ? 通过Socket产生IO流来进行网络通信? ? ? ? 1,TCP发送数据步骤? ? ? ? ?创建客户端Socket对象(Socket)与指定服务器连接 ? ? ? ? ? ? ? ? Socket(String? host,int port) ? ? ? ? 获取输入流,写数据 ? ? ? ? 释放资源
2,TCP接收数据? ? ? ? 创建服务器端的Socket对象 ? ? ? ? 监听客户端连接,返回一个Socket对象 ? ? ? ? 获取输入流,读取数据,并把数据显示在控制台 ? ? ? ? 释放资源
1,accept方法是阻塞的,作用就是等待客户端连接 2,客户端创建对象并连接服务器,此时是通过三次握手协议保证跟服务器之间的连接 3,针对客户端来讲,是往外写的,所以是输出流 ? ? ? ?针对服务器来讲,是往里读的,所以是输入流 4,read方法也是阻塞的 5,在关流的时候,还多了一个往服务器写结束标记的动作 6,最后一步断开连接,通过四次挥手协议保证连接终止 3,三次握手客户端? ? 客户端向服务器发出连接请求,等待服务器确认? ? 服务器 客户端? ? ?服务器向客户端返回一个响应,告诉客户端收到了请求? ?服务器 客户端? ? ?客户端向服务器再次发出确认信息,连接建立? ? 服务器 4,四次挥手客户端? ? ? ? 客户端向服务器发出取消连接请求? ?服务器端 客户端? ? ? ? 服务器向客户端返回一个响应,标识收到客户端取消请求? 服务器端 客户端? ? ? ? 服务器向客户端发出确认取消信息? ?服务器端 客户端? ? ? ? 客户端再次发送确认信息,连接取消? ? 服务器端 四,网络编程高级服务端优化 ? ? ? ? 第一个弊端:服务器只能处理一个客户端请求,接收完一个图片之后,服务器就关闭了 ? ? ? ? 改进方式:循环 ? ? ? ? 第二个弊端:第二次上传文件的时候,会把第一次的文件给覆盖 ? ? ? ? 改进方式:UUID.randomUUID()方法生成随机的文件名 ? ? ? ? 加入循环后有引发了一个问题: ? ? ? ? ? ? ? ? ? ? ? ? 使用循环虽然可以然服务器处理多个客户端请求,但是还是i无法同时跟多个客户端进行通信 ? ? ? ? 改进方式:开启多线程处理 ? ? ? ? 加入多线程以后又引发一个问题: ? ? ? ? ? ? ? ? ? ? ? ? 使用多线程虽然可以让服务器同时处理多个客户端请求,但是资源消耗太大 ? ? ? ? 该井方式:使用线程池 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/26 7:31:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |