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发信息  
  • 相关阅读:
    服务部署 RPC vs RESTful
    模拟浏览器之从 Selenium 到splinter
    windows程序设计 vs2012 新建win32项目
    ubuntu python 安装numpy,scipy.pandas.....
    vmvare 将主机的文件复制到虚拟机系统中 安装WMware tools
    ubuntu 修改root密码
    python 定义类 简单使用
    python 定义函数 两个文件调用函数
    python 定义函数 调用函数
    python windows 安装gensim
  • 原文地址:https://www.cnblogs.com/lizhangyong/p/8146088.html
Copyright © 2011-2022 走看看