java个人笔记之UDP和TCP

本文介绍了互联网通信的基本概念,包括协议、IP地址及端口号等。详细解释了常见协议如HTTP、FTP、TCP、UDP和IP的功能,并通过实例展示了UDP和TCP网络编程的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念

协议

在互联网中进行通信时需要进行一些协定,这样的约定就叫做协议。当多个协议放在一起的时候,就叫做协议簇/协议族。
常见的协议有:
1. HTTP协议:超文本传输协议,用于浏览网页时需要遵循的协议。
2. FTP协议:文件传输协议,用于传输文件。
3. TCP协议:传输控制协议,是一种面向连接的协议,类似于打电话。
4. UDP协议:用户数据报协议,是一种非面向连接的协议,类似于写信。
5. IP协议:互联网协议,是上述协议的底层协议。

IP地址

本质上就是互联网中的地址标识。
IP地址主要有两个版本,IPV4和IPV6,主流是IPV4。
IPV4的地址本质上是由32位二进制组成的整数,IPV6则是由128位二进制组成的整数。

端口号

可以定位到设备中的某一个设备
端口的范围是0 ~ 65535,0 ~ 1203由系统占用。

UDP和TCP网络编程的模型

UDP网络编程的模型

模型分析

主机A:
1. 创建DatagramSocket类型的对象,准备用于通信的Socket。
2. 创建用于发送/接收需要的byte数组类型的数据。
3. 创建DatagramPacket类型的对象,准备用于通信的数据报。
4. 发送/接收数据。
5. 关闭相关的资源。

主机B:
1. 创建DatagramSocket类型的对象,准备用于通信的Socket。
2. 创建用于发送/接收需要的byte数组类型的数据。
3. 创建DatagramPacket类型的对象,准备用于通信的数据报。
4. 发送/接收数据。
5. 关闭相关的资源。

代码实现

主机A(发送数据):

    package com.UDP;

    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;

    public class A {
        public static void main(String[] args) throws Exception{
            //创建DatagramSocket对象,准备用于通信的Socket
            DatagramSocket ds = new DatagramSocket();
            //创建传输的数据
            byte[] by = new byte[1024];
            by = new String("abcd").getBytes();
            //创建DatagramPacket对象,准备用于通信的通信报
            DatagramPacket dp = new DatagramPacket(by, by.length, InetAddress.getByName("127.0.0.1"), 4567);
            //发送数据
            ds.send(dp);
            //关闭相关资源
            ds.close();
        }
    }

主机B(接收数据):

    package com.UDP;

    import java.net.DatagramPacket;
    import java.net.DatagramSocket;

    public class B {
        public static void main(String[] args) throws Exception{
            //创建DatagramSocket的对象,用于通信的Socket
            DatagramSocket ds = new DatagramSocket(4567);
            //创建一个用于接收数据的 byte数组
            byte[] by = new byte[1024];
            //创建DatagramPacket的对象,用于通信的数据报
            DatagramPacket dp = new DatagramPacket(by, by.length);
            //接收数据
            ds.receive(dp);
            //打印结果
            String result = new String(dp.getData(),0,dp.getLength());
            System.out.println(result);
            //关闭相关资源
            ds.close();
        }
    }

TCP网络编程的模型

模型分析

服务端(Server):
1. 创建ServerSocket类型的对象,并提供端口号。
2. 等待客户的连接请求,如果没有客户端连接,则保持阻塞状态。
3. 当有客户端发出连接请求,就可以创建相关的流来进行通信。
4. 关闭相关的资源。

客户端(Client):
1. 创建Socket,并提供目标主机IP和端口。
2. 发出连接请求时,就可以创建相关的流来进行通信。
3. 关闭相关的资源。

代码实现

服务端(接收数据然后返回数据):

    package com.TCP;

    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class Server {
        public static void main(String[] args) throws Exception{
            //创建一个ServerSocket类型的对象,并提供端口号
            ServerSocket ss = new ServerSocket(4568);
            //从ServerSocket获取Socket对象
            Socket s = ss.accept();
            //当客户端发出连接请求时,就可以创建相关的流来进行通信,因为返回的是一个OutputStream和一个InputStream,因此可以传输多种类型的数据
            DataOutputStream dos = new DataOutputStream(s.getOutputStream());
            DataInputStream dis = new DataInputStream(s.getInputStream());
            //接收返回的数据
            int result = dis.read();
            //打印数据
            System.out.println(result);
            //传输基本数据
            dos.write(5);
            dos.close();
            dis.close();
            ss.close();
        }
    }

客户端(发送数据然后等待数据传回):

    package com.TCP;

    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.net.Socket;

    public class Client {
        public static void main(String[] args) throws Exception{
            //创建一个Socket类型的对象,用于发送数据,提供主机IP和端口
            Socket s = new Socket("192.168.3.77", 4568);
            //当客户端发出连接请求时,就可以创建相关的流来进行通信,因为返回的是一个OutputStream和一个InputStream,因此可以传输多种类型的数据
            DataOutputStream dos = new DataOutputStream(s.getOutputStream());
            DataInputStream dis = new DataInputStream(s.getInputStream());
            //发送数据
            dos.write(4);
            //接收数据
            int result = dis.read();
            //打印传输过来的数据,并且返回数据
            System.out.println(result);
            //关闭相关的资源
            dis.close();
            dos.close();
            s.close();
        }
    }

0471

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值