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 的 用的 要关闭

    如图所示:

        

 

 

 

posted on 2019-11-07 17:01  仰望星空77  阅读(133)  评论(0编辑  收藏  举报