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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 2021-07-23 -> 正文阅读

[网络协议]2021-07-23

网络编程

网络编程 : 底层,关注数据如何传输,如何存储
节点 : 网络电子设备
节点与节点之间组成网络
IP : 表示节点
端口 : 区分不同的软件
URL : 互联网中资源的指针,统一资源定位符
协议 : 合同,标准,规范
传输层协议 :
UDP : 相当于写信 只管写只管发 效率高 不安全 大小存在限制
TCP : 相当于打电话 面向连接 安全性高 效率低 大小没有限制 ****

IP :

定义网络中的节点 (网络电子设备,手机,电脑,路由器…)
分为 : IPV4(4个字节,32位) IPV6 (128位)
特殊IP:
192.168.0.0~192.168.255.255 非注册IP,供组织内部使用
127.0.0.1 本地IP
localhost : 本地域名
域名与IP之间的关系: DNS解析器

public class IP {
    public static void main(String[] args) throws UnknownHostException {
        //static InetAddress getByName(String host) 根据主机名称确定主机的IP地址。
        //static InetAddress getLocalHost() 返回本地主机的地址。
        InetAddress address1 = InetAddress.getLocalHost();
        System.out.println(address1); //DESKTOP-KHNV6UD/192.168.16.236
        System.out.println(address1.getHostName());
        System.out.println(address1.getHostAddress());

        InetAddress address2 =  InetAddress.getByName("www.baidu.com");
        System.out.println(address2);
        System.out.println(address2.getHostName());
        System.out.println(address2.getHostAddress());
    }
}

端口

端口 : 区分软件
端口号 2个字节 0~65535
同一协议下端口号不能冲突
建议使用8000以上的,8000以下称为预留端口好
常见的端口:
80 : http
8080 : tomcat
1521 : Oracle
3306 : Mysql

public class Port {
    public static void main(String[] args)  {
        //InetSocketAddress(String hostname, int port) 根据主机名和端口号创建套接字地址。
        //InetSocketAddress(InetAddress addr, int port) 根据IP地址和端口号创建套接字地址。
        InetSocketAddress in = new InetSocketAddress("localhost",8989);
        System.out.println(in);
        System.out.println(in.getHostName());
        System.out.println(in.getPort());
    }
}

URL

同一资源定位符,指向万维网上的“资源”的指针。
组成: 协议: 如,http ;域名:如, www.baidu.com ;端口号: 如,80;资源: 如,index.html;提交数据:如,name=zhangsan&pwd=123;锚点:如,#a
互联网 的三大基石: html、 http、 url;

public class Class003_URL {
    public static void main(String[] args) throws MalformedURLException {
        //URL(String spec) 从 String表示创建 URL对象。
        //URL(String protocol, String host, int port, String file)
        URL url = new URL("https://www.baidu.com:80/index.html?name=zhangsan&pwd=123#a");

        System.out.println(url);
        System.out.println("协议:"+url.getProtocol());
        System.out.println("域名:"+url.getHost());
        System.out.println("端口:"+url.getPort());
        System.out.println("资源:"+url.getFile());
        System.out.println("资源:"+url.getPath());
        System.out.println("资源:"+url.getQuery());
        System.out.println("资源:"+url.getRef());
    }
}

结果为:
在这里插入图片描述
套接字:
传输层为应用层开辟的小口子
不同协议下Socket实现不同
UDP与TCP协议对Socket实现
UDP : 相当于写信|有包裹|发短信 非面向连接 协议简单,开销小,效率高 不安全 大小由限制(一般不超过60k)
TCP : 相当于打电话 面向连接 效率低 安全 大小没有限制
基于三次握手
UDP协议下发送端与接收端两端平等
DatagramSocket 此类表示用于发送和接收数据报包的套接字。
DatagramSocket(int port) 构造一个数据报套接字并将其绑定到本地主机上的指定端口。
void receive(DatagramPacket p) 从此套接字接收数据报包。
void send(DatagramPacket p) 从此套接字发送数据报包。
DatagramPacket 该类表示数据报包。
byte[] getData() 返回数据缓冲区。
int getLength() 返回要发送的数据的长度或接收的数据的长度。
数据的传输基于字节数组

public class UDP_Send {
    public static void main(String[] args) throws IOException {
        // 1.定义我是发送端
        DatagramSocket s = new DatagramSocket(9090);

        System.out.println("-------------我是发送端-------------");

        // 2.准备数据
        byte[] arr = "你好".getBytes();
        // 3.打包
        DatagramPacket packet = new DatagramPacket(arr,0,arr.length,new InetSocketAddress("127.0.0.1",8989));
        // 4.发送
        s.send(packet);
        // 5.关闭
        s.close();
    }
}
public class UDP_Receive {
    public static void main(String[] args) throws IOException {
        //1.定义我是接收端
        DatagramSocket r = new DatagramSocket(8989);

        System.out.println("-----------我是接收端------------");

        //2.准备字节数组,打包
        byte[] arr = new byte[1024];
        DatagramPacket packet = new DatagramPacket(arr,arr.length);
        //3.接收数据
        r.receive(packet);
        //4.处理数据
        //byte[] getData() 返回数据缓冲区。
        //int getLength() 返回要发送的数据的长度或接收的数据的长度。
        byte[] newArr = packet.getData();
        int len = packet.getLength();

        System.out.println(new String(newArr,0,len));

        //5.关闭
        r.close();
    }
}

TCP编程

TCP协议是面向连接的、可靠的、有序的、以字节流的方式发送数据,通过三次握手方式建立连接,形成传输数据的通道,在连接中进行大量数据的传输,效率会稍低
Java中基于TCP协议实现网络通信的类 客户端的Socket类 服务器端的ServerSocket类
链接:https://www.jianshu.com/p/5de7306e15ab

public class Client {
    public static void main(String[] args) throws IOException {
        System.out.println("-----------我是客户端--------------");
        //  1.定义我是客户端-->指定要请求的服务器的IP+端口
        Socket client = new Socket("localhost",9999);
        System.out.println("-----------与服务器端建立连接--------------");
        //  2.准备数据
        String str = "你好";
        //  3.获取输出流
        DataOutputStream os = new DataOutputStream(new BufferedOutputStream(client.getOutputStream()));
        //  4.输出-->IO操作
        os.writeUTF(str);
        //  5.刷出
        os.flush();
        //  6.关闭
        os.close();
        client.close();
    }
}
public class Server {
    public static void main(String[] args) throws IOException {
        System.out.println("-----------我是服务器端-----------");
        // 1.定义我是服务端
        ServerSocket server = new ServerSocket(9999);
        // 2.阻塞式监听
        Socket client = server.accept();

        System.out.println("-----------一个客户端连接成功----------");

        // 3.获取输入流-->接收客户端的请求数据
        DataInputStream is = new DataInputStream(new BufferedInputStream(client.getInputStream()));
        String msg = is.readUTF();
        // 4.处理数据
        System.out.println(msg);
        // 5.关闭
        is.close();
        client.close();
        server.close();
    }
}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 12:00:04  更:2021-07-25 12:01:14 
 
开发: 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/25 17:46:28-

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