zoukankan      html  css  js  c++  java
  • UDP与TCP

    UDP协议与TCP协议

      UDP协议

         UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,即发送端不用等接收端建立连接,单独发布消息,

        用于音频、视频和普通数据的传输。

      TCP协议  

        TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“握手”才能建立,其中的过程非常复杂,经过三次“对话”之后,主机A才向主机B正式发送数据。

        一般用于接收文件,可以确保安全性。

      UDP协议与TCP协议之间的区别

        1.udp连接无要求,tcp连接需要确保发送端与接收端之间的联系;
        2.对系统资源的要求(TCP较多,UDP少);
        3.UDP程序结构较简单;
        4.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

    UDP通信与TCP通信

      UDP通信

        常用的两个类:DatagramPacket、DatagramSocket,分别用于对数据的打包和接收。具有单独的构造方法。

        DatagramPacket常用方法:

          getAddress():获取发送端的ip地址

          getPort():获取发送端的端口号

          getData():获取接收的数据

          getLength():获取接收数据的长度

        DatagramSocket常用方法:

          receive():接收数据包

          send():发送数据包

        UDP编程的接收端一般步骤是: 

     1 //创建datagramSocket对象,明确端口号
     2         DatagramSocket ds=new DatagramSocket(8888);
     3         //创建空的字节数组用于数据接收
     4         byte[] bs=new byte[1024];
     5         //创建空的datagramPacket对象,传给ds用于接收数据
     6         DatagramPacket dp=new DatagramPacket(bs, bs.length);
     7         //接收数据包
     8         ds.receive(dp);
     9         //拆包
    10         //获取发送端的ip地址
    11         String ip=dp.getAddress().getHostAddress();
    12         //获取发送端的端口号
    13         int port=dp.getPort();
    14         //获取接收的数据
    15         byte[] b=dp.getData();
    16         //获取接收数据的长度
    17         int length=dp.getLength();
    18         System.out.println("ip地址为"+ip+"端口号为"+port+"发送内容为"+new String(b,0,length));

        UDP编程的发送端一般步骤是:

     1 //创建datagramPacket对象对数据进行打包
     2         //创建字节数组封装数据
     3         byte[] bs="我不好呢".getBytes();
     4         //明确目的地
     5         InetAddress inet=InetAddress.getByName("192.168.1.175");
     6         //打包
     7         DatagramPacket dp=new DatagramPacket(bs, bs.length,inet,8888);
     8         //创建datagramSocket对象,负责发送数据包
     9         DatagramSocket ds=new DatagramSocket();
    10         //发送数据包
    11         ds.send(dp);
    12         //释放资源
    13         ds.close();

      TCP通信

        常用的两个类:ServerSocket、Socket分别用于表示服务器端和表示客户端。

        ServerSocket作用相当于开启一个服务,并等待客户端的连接,

        Socket向服务器端发出连接请求,服务器端响应请求,两者建立连接开始通信。

        TCP编程的服务器端一般步骤是:

     1 //创建serversocker对象,明确端口号
     2         ServerSocket server=new ServerSocket(6666);
     3         //与客户端创建连接,并获取客户端对象
     4         Socket socket=server.accept();
     5         //获取字节输入流,接收客户端发送的数据
     6         InputStream in=socket.getInputStream();
     7         byte[] bs=new byte[1024];
     8         int len=0;
     9         while((len=in.read(bs))!=-1){
    10             System.out.println(new String(bs,0,len));
    11         }
    12         //服务器端给客户端响应
    13         //获取字节输出流,写给客户端响应
    14         OutputStream out=socket.getOutputStream();
    15         //写数据
    16         out.write("收到".getBytes());
    17         socket.shutdownOutput();
    18         //释放资源
    19         server.close();
    20     }

        TCP编程的客户端一般步骤是: 

     1 //创建客户端对象Socket
     2         Socket socket=new Socket("127.0.0.1",6666);
     3         //从socket对象获取字节输出流,将数据写向服务器
     4         OutputStream out=socket.getOutputStream();
     5         out.write("你好啊".getBytes());
     6         socket.shutdownOutput();//流里没有结束标记
     7         
     8         //接收服务器的回应
     9         //获取字节输入流,接收服务器端给的响应数据
    10         InputStream in=socket.getInputStream();
    11         byte[] bs=new byte[1024];
    12         int len=0;
    13         while((len=in.read(bs))!=-1){
    14             System.out.println(new String(bs,0,len));
    15         }
    16         //释放资源
    17         socket.close();   //new 的 用的 要关闭

        如图所示:

            

  • 相关阅读:
    HTML5 学习笔记(三)——本地存储(LocalStorage、SessionStorage、Web SQL Database)
    HTML5 学习笔记(二)——HTML5新增属性与表单元素
    apache 运行一段时间出现错误
    先验算法(Apriori algorithm)
    Opera官网打不开 下载Opera最新版本的实际地址
    网址查看浏览器内核版本
    小鸟云四个数据中心介绍
    nilcms file类 简单文件缓存实现
    小鸟云优惠券 云服务器介绍
    PHP中测试in_array、isset、array_key_exists性能
  • 原文地址:https://www.cnblogs.com/zhai113/p/11797623.html
Copyright © 2011-2022 走看看