java网络编程基础——UDP通信之DatagramSocket

import java.net.*;
/*
通过UDP传输方式,将文字数据发送出去
①建立udp服务,udp端点。
②提供数据,将数据封装到数据包中
③通过socket服务的发送功能,将数据包发送出去
④关闭资源
    
*/
class UdpSend
{
    public static void main(String[] args) throws Exception 
    {
//        try{
            DatagramSocket ds=new DatagramSocket(8888);    //此处的端口号为从发送端的主机的8888端口发出
            
//相当于第一步,可传(端口号),(端口号+InetAddress对象),或者不传参数()
            
            byte[] data="UDP Hellow World Sending Message".getBytes();
            DatagramPacket dp=new DatagramPacket(data,data.length,InetAddress.getLocalHost(),10000);
            //相当于第二步,此处的10000端口为目的主机的端口为10000

            ds.send(dp);
            //第三步
            
            ds.close();
//        }


    }
}
/*----------------------------分隔符-------------------------------------------*/

/*
用于接受udp数据包,
①定义udpsocket服务
②定义一个数据包,因为要存储要接收到的数据
③通过socket服务的receive方法将收到的数据存入定义好的数据包中
④通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上。
⑤关闭资源
*/
class UdpRece
{
    public static void main(String[] args)throws Exception
    {
        //步骤一建立udp socket,加上端口号,表示要监听哪个端口
        DatagramSocket ds=new DatagramSocket(10000 );

        //步骤二,定义数据包
        byte[] buf=new byte[1024];
        DatagramPacket dp=new DatagramPacket(buf,buf.length);

        //步骤三,通过服务的receive方法将收到的数据存入数据包中
        ds.receive(dp);//dp中的DatagramPacket有数据了!

        
//步骤四,读取数据包中的数据,那到底该怎么拿呢?查文档
        String ip=dp.getAddress().getHostAddress();//发现getAddress返回ip地址的封装类InetAddress,
                                        
//再用getHostAddress获得获得发送方的ip地址
        String data=new String(dp.getData(),0,dp.getLength());    //getData可获得数据缓冲区,即接受到的数据
                                        
//但这是byte[]数组类型,转换!!
        int port=dp.getPort();    //获得端口号,即发送方的端口号,不多解释
        System.out.println(ip+"::"+data+"::"+port);        //打印查看结果吧
        

    }

}
posted @ 2013-04-15 20:12  John_John_John  阅读(408)  评论(1编辑  收藏  举报