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

[网络协议]网络通信协议UDPTCP

网络编程三要素
? ? ? ?协议????????IP地址????????端口号

协议

协议
? ? ? ? ? ? ?计算机之间进行数据传输需要遵守的规则
? ? ? ? ? ? ?UDP:
? ? ? ? ? ? ? ? 面向无连接的通信协议,两台计算机进行数据传输不需要建立连接,
? ? ? ? ? ? ? ? 发送端给接收端发送数据 不会确认接收端是否存在 接收端接收到数据 也不会告知发送端

特点
? ? ? ? ? ? ? ? ? ? 两台计算机不需要建立连接 ,消耗资源少,发送效率高,但是每次发送的最大不能超过64KB
? ? ? ? ? ? ? ? ? ? 不保证数据的完整性
? ? ? ? ? ? ?TCP:
? ? ? ? ? ? ? ? ?面向连接的通信协议,客户端与服务端必须建立连接,可以保证两台计算机之间可靠的无差错的数据传输.

? ? ? ? ? ? ? ? ?客户端 -----> 服务端
? ? ? ? ? ? ? ? ?客户端 <----- 服务端
? ? ? ? ? ? ? ? ?客户端 -----> 服务端

? ? ? ? ? ? ? ? ?特点
? ? ? ? ? ? ? ? ? ? ?必须建立连接,消耗资源多,发送效率低,但是每次发送数据没有限制,可以保证数据的完整性

? ? ? ? ? ? ? ? ? ? ?上传与下载一定使用TCP协议

? IP地址

查看本机ip
?ipconfig

查看网络是否能够连通

ping ?ip地址
?ping ?网址

特殊的ip
127.0.0.1

localhost

端口号

如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的进程(应用程序)了。
? ? ? ? ? ? 取值范围是0~65535。其中,0~1023之间的端口号用于一些知名的网络服务和应用
? ? ? ? ? ? 普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败。

java.net.InetAddress????????ip地址

????????静态方法创建对象

static InetAddress getLocalHost() ?返回本地主机的ip地址对象
static InetAddress getByName(String ip) 根据ip获取到ip地址对象 ?ip可以是网址 也可以是ip地址?也可以是主机名

UDP

UDP发送端
? ? ? ? ? ? ? java.net.DatagramSocket
? ? ? ? ? ? ? ? ? ? ?构造方法
? ? ? ? ? ? ? ? ? ? ? ? ? public DatagramSocket() ?发送端
? ? ? ? ? ? ? ? ? ? ?方法
? ? ? ? ? ? ? ? ? ? ? ? ?send(DatagramPacket dp) ?发送数据包

? ? ? ? ? ? ? java.net.DatagramPacket
? ? ? ? ? ? ? ? ? ? ? 构造方法
? ? ? ? ? ? ? ? ? ? ? ? ? DatagramPacket(byte[] buf, int length, InetAddress address, int port)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 发送端数据包 封装 数据 ?接收端地址 接收端端口

public class UDPSend {
    public static void main(String[] args) throws IOException {
        //  1.创建发送端对象
        DatagramSocket ds = new DatagramSocket();

        //  2.创建数据包对象 封装数据 接收端地址 接收端的端口
        byte[] bytes = "hello,UDP!".getBytes();
        //接收端的ip地址对象
        InetAddress ip = InetAddress.getByName("127.0.0.1");
        //端口号
        int port = 5555;
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length,ip,port);

        // 3.调用发送端对象的send方法 发送数据包
        ds.send(dp);

        //关闭资源
        ds.close();
    }
}

UDP接收端
? ? ? ? ? ? ? 构造方法
? ? ? ? ? ? ? ? ? ?public DatagramSocket(int port) 创建接收端绑定端口号
? ? ? ? ? ? ? 方法
? ? ? ? ? ? ? ? ?void receive(DatagramPacket p) ?接收数据包


? ? ? ?java.net.DatagramPacket
? ? ? ? ? ? ? 构造方法
? ? ? ? ? ? ? ? ? DatagramPacket(byte[] buf, int length) 接收端数据包

public class UDPReceive {
    public static void main(String[] args) throws IOException {
        //1.创建接收端对象
        DatagramSocket ds = new DatagramSocket(5555);

        //2.创建数据包对象
        byte[] bytes = new byte[1024*64];
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
        // 3.接收端对象调用 receive方法 接收数据包
        ds.receive(dp);

        // 4.拆包
        int length = dp.getLength(); //获取发送过来数据的长度
        InetAddress ip = dp.getAddress(); //获取发送端的ip地址
        int port = dp.getPort(); //获取发送端发送数据的端口号
        System.out.println(ip+":"+port+" "+new String(bytes,0,length));

        ds.close();
    }
}

TCP

java.net.Socket ? 客户端
? ? ? ? ? 构造方法
? ? ? ? ? ? ? public Socket(String ip,int port) 绑定服务端ip和端口
? ? ? ? ? ? ? public Socket(InetAddress ip ,int port)

? ? ? ? ? 方法
? ? ? ? ? ? ? ?public ?OutputStream getOutputStream() 获取字节输出流
? ? ? ? ? ? ? ?public InputStream getInputStream() 获取字节输入流

public class TCPClient {
    public static void main(String[] args) throws IOException {
        // 1.创建客户端对象
        Socket s = new Socket("127.0.0.1",6666);
        // 2.获取字节输出流对象
        OutputStream out = s.getOutputStream();
        // 3.使用字节输出流向服务端写数据 "你好"
        out.write("你好".getBytes());

        System.out.println("-------------接收服务器返回的数据---------------");
        // 4.获取字节输入流对象
        InputStream in = s.getInputStream();
        // 5.接收服务器返回的数据 
        byte[] bytes = new byte[1024];
        int len = in.read(bytes);
        System.out.println(new String(bytes,0,len));
        // 6.关闭资源
        in.close();
        out.close();
        s.close();
    }
}

java.net.ServerSocket 服务端
? ? ? ? ? ? 构造方法
? ? ? ? ? ? ? ? ?public ServerSocket(int port) 创建服务端对象 绑定端口号

? ? ? ? ? ? 方法
? ? ? ? ? ? ? ? ?Socket accept() ?接收正在连接的客户端对象 ?具有阻塞功能

public class TCPServer {
    public static void main(String[] args) throws IOException {
        // 1.创建服务端对象
        ServerSocket ss = new ServerSocket(6666);
        //2.调用accept方法接收正在连接的客户端对象
        Socket s = ss.accept();
        // 3.获取字节输入流对象
        InputStream in = s.getInputStream();
        // 4.接收当前客户端发送过来的数据  "你好"
        byte[] bytes = new byte[1024];
        int len = in.read(bytes);
        System.out.println(new String(bytes,0,len));
        System.out.println("---------------向客户端返回数据-------------------");
        // 5.获取字节输出流对象
        OutputStream out = s.getOutputStream();
        // 6.给客户端返回数据
        out.write("大家好".getBytes());
        // 7.关闭资源
        out.close();
        in.close();
        s.close();
        ss.close();
    }
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 13:03:32  更:2021-08-18 13:03:36 
 
开发: 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年5日历 -2024/5/17 15:58:11-

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