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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 轻松学会网络编程 -> 正文阅读

[网络协议]轻松学会网络编程

网络编程

网络编程: 底层数据的传输 网页编程: 上层的应用

一、网络编程基础

IP : 表示定位节点 端口 : 区分软件 URL : 统一资源定位符 协议 : 标准 , 要求 , 合同 , 协议可以使交流变得更加畅通,更加标准,更加规范.

传输层协议 : UDP : 相当于写信, 协议简单,开销小,效率高 不安全 大小有限制,一般不超过60k TCP : 相当于打电话, 面向连接的,安全,效率低 没有大小限制 *

1.1 IP

IP : 定义互联网中的节点 IPV4 : 4个字节 32位 IPV6 : 12位 特殊的IP地址: 192.168.0.0~192.168.255.255 非注册IP,供组织内部使用 127.0.0.1 本地IP localhost : 本地 IP -> 域名 : DNS解析器 java.net 网络包 InetAddress : 此类表示Internet协议(IP)地址。

public class Class001_IP {
 ?  public static void main(String[] args) throws UnknownHostException {
 ? ? ?  //static InetAddress getLocalHost() 返回本地主机的地址。
 ? ? ?  InetAddress ip1 = InetAddress.getLocalHost();
 ? ? ?  System.out.println(ip1);  //DESKTOP-KHNV6UD/192.168.207.49
 ? ? ?  System.out.println(ip1.getHostName()); //DESKTOP-KHNV6UD
 ? ? ?  System.out.println(ip1.getHostAddress());  //192.168.207.49
?
 ? ? ?  //static InetAddress getByName(String host) 根据主机名称确定主机的IP地址。
 ? ? ?  InetAddress ip2 = InetAddress.getByName("www.baidu.com");
 ? ? ?  System.out.println(ip2.getHostName());  //www.baidu.com
 ? ? ?  System.out.println(ip2.getHostAddress());  //180.101.49.11
 ?  }
}

1.2 端口 port

端口 : 区分软件 1.2个字节的端口号 0~65535 2.同一协议下端口号不能冲突 3.8000以内的端口号不推荐使用,称为预留端口号 4.常见的端口号: 80 : http 8080 : tomcat 1521 : Oracle 3306 : Mysql

InetSocketAddress 此类实现IP套接字地址(IP地址+端口号).

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

1.3 URL:统一字符定位符

URL : 统一资源定位符 互联网的三大基石 : http html url

组成: 1.协议 2.域名 3.端口 4.资源

百度一下,你就知道 URL : 类URL表示统一资源定位符,指向万维网上的“资源”的指针。

public class Class003_URL {
 ? ?public static void main(String[] args) throws MalformedURLException {
 ? ? ? ?URL url = new URL("http://www.baidu.com:80/index.html?username=zhangsan&password=1234#a");
 ? ? ? ?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 套接字 传输层为应用层开辟的口子,相当于码头,插座.. 不同的传输层协议下Socket实现不同 网络编程其实成为面向Socket编程 传输层协议: 合同 UDP : 非面向连接的,相当于写信,邮寄包裹 不安全|不可靠 协议简单,开销小,效率高 只管发送 大小存在限制,不超过60k TCP : 面向连接,相当于打电话, 安全可靠 但是效率低, 没有大小限制 3次握手 4次挥手

2.1 UDP 协议

UDP协议下数据的传输 节点A : 发送端 节点B : 接收端 UDP协议下两端平等,基于字节数组传输数据 DatagramSocket : 此类表示用于发送和接收数据报包的套接字。 DatagramPacket : 数据报包

2.1.1 UDP协议发送端

UDP协议实现发送端: 1.定义我是发送端 DatagramSocket(int port) 构造一个数据报套接字并将其绑定到本地主机上的指定端口。 2.准备数据 3.数据打包 DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) 4.发送数据 void send(DatagramPacket p) 5.关闭 注意: 同一协议下端口号不能冲突

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

2.1.2 UDP协议接收端

DP协议实现接收端: 1.定义我是接收端 DatagramSocket(int port) 构造一个数据报套接字并将其绑定到本地主机上的指定端口。 2.准备包裹接收数据 3.接收数据,阻塞式接口 void receive(DatagramPacket p) 4.处理数据 5.关闭

public class Class002_Receive {
 ? ?public static void main(String[] args) throws IOException {
 ? ? ? ?//1.定义我是接收端 DatagramSocket(int port) 构造一个数据报套接字并将其绑定到本地主机上的指定端口。
 ? ? ? ?DatagramSocket receiveSocket = new DatagramSocket(8888);
 ? ? ? ?//2.准备包裹接收数据
 ? ? ? ?byte[] arr = new byte[1024];
 ? ? ? ?DatagramPacket packet = new DatagramPacket(arr,arr.length);
 ? ? ? ?//3.接收数据,阻塞式接口
 ? ? ? ?receiveSocket.receive(packet);
 ? ? ? ?//4.处理数据
 ? ? ? ?//byte[] getData() 返回数据缓冲区。
 ? ? ? ?//int getLength() 返回要发送的数据的长度或接收的数据的长度。
 ? ? ? ?byte[] datas = packet.getData();
 ? ? ? ?int len = packet.getLength();
 ? ? ? ?System.out.println(new String(datas,0,len));
 ? ? ? ?//5.关闭
 ? ? ? ?receiveSocket.close();
 ?  }
}

2.2 TCP 协议

注意:①TCP协议下数据的传输基于IO流 ②先开启服务器端然后再运行客户端,因为tcp协议基于连接

2.2.1 TCP协议 客户端

TCP协议协议实现基本流程 : 客户端 1.定义我是客户端 Socket(String host, int port) 创建流套接字并将其连接到指定主机上的指定端口号。 参数指的是要连接的服务器的ip+端口 2.准备数据 3.IO操作发送数据 4.刷出 5.关闭

public class Class001_Client {
 ?  public static void main(String[] args) throws IOException {
 ? ? ?  System.out.println("------------客户端---------------");
 ? ? ?  //1.定义我是客户端
 ? ? ?  Socket client = new Socket("localhost",8989);
 ? ? ?  System.out.println("------------与服务器之间建立了连接---------------");
 ? ? ?  //2.准备数据
 ? ? ?  String msg = "你好";
 ? ? ?  //3.IO操作发送数据
 ? ? ?  DataOutputStream os = new DataOutputStream(client.getOutputStream());
 ? ? ?  os.writeUTF(msg);
 ? ? ?  //4.刷出
 ? ? ?  os.flush();
 ? ? ?  //5.关闭
 ? ? ?  os.close();
 ? ? ?  client.close();
 ?  }
}

2.2.2 TCP协议 服务端

TCP协议协议实现基本流程 : 服务端 1.定义我是服务端 ServerSocket(int port) 创建绑定到指定端口的服务器套接字。 默认服务器的IP为当前IP,服务器的端口,为参数所指定的端口 2.阻塞式监听 Socket accept() 侦听对此套接字的连接并接受它。 3.IO接收数据 4.处理数据 5.关闭

public class Class002_Server {
 ? ?public static void main(String[] args) throws IOException {
 ? ? ? ?System.out.println("---------------服务端--------------");
 ? ? ? ?//1.定义我是服务端
 ? ? ? ?ServerSocket server = new ServerSocket(8989);
 ? ? ? ?//2.阻塞式监听
 ? ? ? ?Socket client = server.accept();
 ? ? ? ?System.out.println("--------------一个客户端连接成功了-----------------");
 ? ? ? ?//3.IO接收数据
 ? ? ? ?DataInputStream is = new DataInputStream(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-11-28 11:37:38  更:2021-11-28 11:39:00 
 
开发: 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年7日历 -2024/7/6 8:31:31-

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