网络编程2-UDP编程(DatagramSocket)

1、传输层有两个协议,一个是tcp协议,另一个是udp协议,tcp协议通过socket编程。udp通过数据报编程。

UDP协议:

  (1)将数据、源地址、目的地址 封装成数据包,不需要建立链接

  (2)每个数据包限制在64K以内

  (3)不可靠

  (4)无需释放资源,速度快

2、(1)类DatagramSocket和DatagramPacket可实现udp编程

  (2)DatagramPacket(数据包)里面装有,发送者地址,接收者地址,端口,和数据,DatagraSocket发送数据包

  (3)系统不保证能否把数据送达目的地,也不一定什么时候到达

  (4)数据包,有发送者接收者地址,所以发送前不用建立连接,不需要三次握手。

3、例子,注意事项在离子里面

package com.udp.test;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

import org.junit.Test;

public class TestUDP {
    private static String SERVER_HOST = "127.0.0.1";
    
    //发送端(和socket的客户端注意区别)
    @Test
    public void send(){
        //1、创建DatagramSocket对象
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket();
            //2、获取要传输的信息,创建数据包对象
            byte [] b = "Hello I am UDP test".getBytes();
            DatagramPacket dp = new DatagramPacket(b, 0, b.length,InetAddress.getByName(SERVER_HOST),8090);
            //3、发送数据包
            ds.send(dp);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            //4、关闭socket连接
            if(ds != null){
                ds.close();
            }
        }
    }
    
    //接受端(和socket的服务端区别)
    @Test
    public void receive(){
        //1、创建DatagramSocket对像
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket(8090);
            //2、创建数据包对象
            byte [] b = new byte[64];
            DatagramPacket dp = new DatagramPacket(b,0,b.length);
            //3、接收
            ds.receive(dp);
            //4、存到字符串dp.getData()方法
            String str = new String(dp.getData(),0,dp.getData().length);
            System.out.println(str);
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            
            //5、关闭ds
            if(ds != null ){
                ds.close();
            }
            
            
        }
        
    }
}

 

posted @ 2015-12-19 23:15  浮白斋主人  阅读(499)  评论(0编辑  收藏  举报