您的位置:首页 > 理论基础 > 计算机网络

黑马程序员----------UDP网络编程

2012-11-15 22:30 190 查看
----------- android培训java培训、java学习型技术博客、期待与您交流! ------------





IP地址和端口

IP地址:是计算机在网络中的唯一标示,我们在进行网络编程时一定要定位到远程计算机,而IP地址就是解决这个问题的。

端口:除了计算机外我们还要定位到具体的应用程序进程,而端口就是给应用程序分配的身份标示。

UDP和TCP

UDP:1,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。

           2,UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64kB之内。

            3,UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

TCP:1,面向连接的协议,在socket之间进行数据传输之前必须要建立连接,是通过三次握手来建立连接的,所以在TCP中需要连接时     
4000
              间。

            2,TCP传输数据大小限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大的数据。

            3,TCP是一个可靠的协议,它确保接收方完全正确的获取发送方所发送的全部数据。

数据帧格式



Socket

简单理解下,Socket就是一个应用程序编程的机制和一种接口,可以理解为是应用程序创建的一个港口码头,应用程序只要把装着货物的集装箱(在程序中就是要通过网络发送的数据)放到港口码头上,就算完成了货物的运送,剩下来的工作就由货运公司去处理了(在计算机中由驱动程序来充当货运公司)。如果把DatagramSocket比喻为创建的港口码头,那么DatagramPacket就是我们发送和接收数据的集装箱。

关于InetAddress类

java中的InetAddress 类是一个代表IP地址的封装。IP地址可以由字节数组和字符串来分别表示,InetAddress将IP地址以对象的形式进行封装,可以更方便的操作和获取其属性。InetAddress没有构造方法,可以通过两个静态方法获得它的对象。

public class IPDemo {

    /**

     * @param args

     * @throws UnknownHostException

     */

    public static void main(String[] args) throws UnknownHostException {

        //获取本地主机ip对象。

//        InetAddress ip = InetAddress.getLocalHost();

        InetAddress ip = InetAddress.getByName("192.168.1.252");

       

        //获取ip对象中的ip地址字符串。或者ip地址对应的主机名称。

        System.out.println(ip.getHostAddress());

        System.out.println(ip.getHostName());

    }

}

UDP编程

接收端

 public class UDPRece {

    /**

     * @param args

     * @throws IOException

     */

    public static void main(String[] args) throws IOException {

        /*

         * udp的接收端:

         * 思路:

         * 1,创建udpsocket服务。

         * 2,接收数据并存储到数据包中,存储到数据包中的目的是为了解析接收到的数据。

         * 3,将解析到的数据打印到显示器。

         * 4,关闭服务。

         */

        System.out.println("udp 接收端开启");

        //1,创建udp的socket服务。用于接收端,一定要指定端口,因为必须要明确从哪个端口来的数据是这个应用程序所能解析的。

        //简单说:接收端必须监听一个端口。

        DatagramSocket  ds = new DatagramSocket(10000);

        

    

        //2,接收数据到数据包中。

        byte[] buf = new byte[1024];

        DatagramPacket dp = new DatagramPacket(buf,buf.length);

        

        ds.receive(dp);

        

        //3,解析数据包中的具体数据。

        String ip = dp.getAddress().getHostAddress();

        int port = dp.getPort();

        String text = new String(dp.getData(),0,dp.getLength());

        System.out.println(ip+":::"+port+":::::"+text);

        

        //4,关闭资源。

        ds.close();

        System.out.println("udp 接收端关闭");

    }

}

发送端

public class UDPSend {

    /**

     * @param args

     * @throws IOException

     */

    public static void main(String[] args) throws IOException {

        /*

         * 通过udp协议创建一个发送端。

         * 思路:

         * 1,应该有可以通过该协议传输数据的对象。先有udp服务。

         * 2,有数据,并将数据封装到数据包,并在包上明确目的地址。

         * 3,通过udp服务将这个数据包发出去。

         * 4,关闭资源。

         */

        System.out.println("udp 发送端开启");

        //1,创建udp socket服务.

        DatagramSocket ds = new DatagramSocket(8888);       

       

        //2,明确数据,并将数据封装到数据包中。

        String str = "udp演示,哥们来了";

        byte[] buf = str.getBytes();

        DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.252"),10000);

       

        //3,将数据包通过socket服务发送。

        ds.send(dp);

       

        //4,关闭资源。

        ds.close();

        System.out.println("udp 发送端关闭");

       

    }

}

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: