TCP与UDP的区别和各自的使用场景

TCP与UDP的区别和各自的使用场景

TCP: 传输控制协议
TCP是面向连接的,可靠的传输协议
面向连接:在传输数据之前,必须要先在两个程序之间建立连接
在数据传输的时候,必须要保证对方收到了数据,在已连接的前提下才能进行数据传输
数据传输结束之后,要断开连接
面向连接就类似于打电话

使用TCP进行数据传输:

新建服务端类:

 public class Sever {
    public static void main(String[] args) throws Exception {
        //创建服务端套接字    10011为端口号,端口号可自定义,连接时客户端端口号必须与服务端一致
        ServerSocket sever = new ServerSocket(10011);
        System.out.println("服务端已启动");
        //等待接收客户端
        Socket socket = sever.accept();
        System.out.println(socket + "已连接----------");
//        从客户端套接字获得输出流
        OutputStream os=socket.getOutputStream();
//        将输出流包装成字符流
        OutputStreamWriter osw=new OutputStreamWriter(os);
//        将字符流包装成缓冲流
        BufferedWriter bw=new BufferedWriter(osw);
//        写入数据
        bw.write("欢迎光临\n");
//        强制输出,避免数据阻塞
        bw.flush();
    }
}

新建客户端类

public class Chat {
    public static void main(String[] args) throws Exception {
//      创建客户端套接字     Localhost为本机地址  由于是在同一台计算机进行传输所以使用 Localhost
//      如果是多台计算机进行传输则需要填写服务端IP地址  如:172.20.168.1
        Socket socket = new Socket("Localhost", 10011);
//       从客户端套接字获得输入流
       InputStream is=socket.getInputStream();
//        将输出流包装成字符流
       InputStreamReader isr=new InputStreamReader(is);
//        将字符流包装成缓冲流
       BufferedReader br=new BufferedReader(isr);
//       读取缓冲流数据
        System.out.println("客户端收到:"+br.readLine());
    }
}

运行测试:(需要先运行服务端)
服务端:
在这里插入图片描述
客户端:
在这里插入图片描述
优点:可靠,如果连接失败则无法进行传输,所以能保证对方一定可以收到数据
缺点:占用的资源多 相较于UDP需要先创建连接
*

UDP: 用户数据报协议

        无连接的,不可靠的传输协议
            无连接:传输数据的时候,不需要建立连接
            不可靠:不保证对方一定会收到数据
            类似于发短信    

使用UDP进行数据传输:

新建服务端

public class MyServer {
    public static void main(String[] args) throws Exception {
       //创建服务端端口地址
        InetSocketAddress server = new InetSocketAddress(10088);
       //接受数据的socket
        DatagramSocket socket = new DatagramSocket(server);
       //准备一个接受数据的UDP数据报,默认是一个空的报文
        byte[] data = new byte[1024];
        DatagramPacket packet = new DatagramPacket(data,0,data.length);


        while(true) {
            //开始等待并接受数据
            socket.receive(packet);

            //处理数据
            byte[] bs = packet.getData();
            //接受到的字节长度
            int len = packet.getLength();

            //将数组转换成字符串
            String msg = new String(bs, 0, len);
            System.out.println(msg);
            }
        }
    }
}

新建客户端

public class MyClient {
    public static void main(String[] args) throws Exception{
        //客户端地址
        InetSocketAddress client = new InetSocketAddress(10086);

        //服务端地址
        InetSocketAddress server = new InetSocketAddress("localhost",10088);

        //UDP套接字对象
        DatagramSocket socket = new DatagramSocket(client);

        Scanner sc = new Scanner(System.in);

        while(true) {
            //UDP数据报
            String msg = sc.nextLine();
            //将数据转换成字节数组
            byte[] data = msg.getBytes();

            //将数据封装成数据报
            //参数1:数据
            //参数2: 起始位置
            //参数3:要发送的字节个数
            //参数4:接收方地址
            DatagramPacket packet = new DatagramPacket(data, 0, data.length, server);


            //发送数据
            socket.send(packet);
        }

    }

}

运行测试:
客户端:
在这里插入图片描述
服务端:
在这里插入图片描述
UDP的不可靠性测试:
服务端关闭状态:
在这里插入图片描述
客户端:
在这里插入图片描述
客户端依然向服务端发送数据,但服务端并未接收
优点:占用资源少,相对于TCP不需要建立连接
缺点:相对于TCP不可靠

使用场景

因此TCP传输适用于重要文件的传输,如视频文件,图片,音频等
UDP适用于快速,即时文件的传输,如在线讯息 QQ微信消息等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值