zoukankan      html  css  js  c++  java
  • Java中的UDP应用

    我在《JavaSE项目之聊天室swing版》中通过遵守TCP协议的ServerSocket与Socket实现了聊天室的群聊窗口。同时,在介绍OSI与TCP/IP参考模型时,也曾提及TCP与UDP(全称User Datagram Protocol,用户数据报协议)。

    总的来说,TCP与UDP的区别有:

    1.TCP与UDP的基本区别:

    (1)TCP基于连接,UDP基于无连接;

    (2)TCP要求系统资源较多,UDP则较少;

    (3)UDP程序结构较简单;

    (4)流模式(TCP)与数据报模式(UDP);

    (5)TCP保证数据正确性,UDP可能丢包;

    (6)TCP保证数据顺序,UDP不保证。

    2.UDP应用场景主要有:

    (1)面向数据报方式;

    (2)网络数据大多为短消息;

    (3)拥有大量Client;

    (4)对数据安全性无特殊要求;

    (5)网络负担非常重,但对响应速度要求高。

    3.具体编程时的区别:

    (1)套接字Socket的参数不同;

    (2)UDP不需要调用listen和accept;

    (3)UDP收发数据分别用send()和receive()方法;

    (4)TCP:地址信息在connect和accept时确定;

    (5)UDP:在send()和receive()方法中每次均需指定地址信息。

    我接下来通过代码演示UDP协议。我写了两个类,分别是UDPA和UDPB,通过UDPA给UDPB发送信息。

    UDPA.java中的代码如下:

    package com.itszt.test;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    /**
     * UDPA要给UDPB发信息
     */
    public class UDPA {
        public static void main(String[] args) throws IOException {
            byte[] bs = "我是A,给B发信息".getBytes();//要发的信息内容
            //UDPA与UDPB的ip均为本机ip,故设置不同的端口号
            InetAddress desIp = InetAddress.getLocalHost();
            //数据报包,UDPB的端口为10010
            DatagramPacket p = new DatagramPacket(bs, bs.length, desIp, 10010);
            //创建数据报套接字,UDPA的端口设置为10086
            DatagramSocket socket_A = new DatagramSocket(10086);
            //UDPA给UDPB发送数据报
            socket_A.send(p);
            //关闭socket_A套接字
            socket_A.close();
        }
    }
    

      UDPB.java中的代码如下:

    package com.itszt.test;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    /**
     * UDPB接收来自UDPA的信息
     */
    public class UDPB {
        public static void main(String[] args) throws IOException {
            //用数组接收数据报包
            byte[] bs = new byte[500];
            DatagramPacket p = new DatagramPacket(bs, bs.length);
            //创建数据报套接字
            DatagramSocket socket_B = new DatagramSocket(10010);
            //接收数据报包
            socket_B.receive(p);
            System.out.println(new String(bs, 0, p.getLength()));
            //关闭套接字
            socket_B.close();
        }
    }  

    在程序运行时,先运行UDPB,等着接收UDPA发来的信息,然后再运行UDPA,则UDPB接收到UDPA的信息如下:

    我是A,给B发信息  
  • 相关阅读:
    45个非常有用的Oracle查询语句(转自开源中国社区)
    Oracle创建表空间及用户
    table里面,怎么根据checkbox选择的一行中的某个单元格的值是否为空,来判断是否该选中
    点击上传按钮,文件自动上传
    如何给frame标签的src属性以及a标签的href属性自动设值
    Tomcat内存溢出的三种情况及解决办法分析
    Java中判断字符串是否为数字的五种方法
    SSH项目里面 忘记密码的邮件发送功能
    form表单提交时,action怎么带参数
    因为多余jar包,所报的错
  • 原文地址:https://www.cnblogs.com/lizhangyong/p/8146088.html
Copyright © 2011-2022 走看看