我在《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发信息  

Java中的UDP应用的更多相关文章

  1. Java中的UDP协议编程

    一. UDP协议定义   UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层——传输层,处于IP协议的上一层.UDP有不提供数据报分组.组装和不能对数据包 ...

  2. 在Java中实现UDP协议编程(DatagramSocket/DatagramPacket)

    1.什么是UDP协议? UDP( User Datagram Protocol )协议是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层——传输层,处于IP协议的上一层. ...

  3. java中的UDP总结

    先说一下关于InetAddress类,用一个小例子: import java.net.InetAddress; import java.net.UnknownHostException; public ...

  4. Java中使用UDP实现简单的聊天功能

    通过DatagramSocket类来实现.此类表示用来发送和接收数据报包的套接字. 发送端代码如下: import java.io.IOException; import java.net.*; im ...

  5. Java 中UDP原理机制及实现方式介绍(建议阅读者阅读前了解下Java的基础知识,一方便理解)

    1.基本概念介绍: 首先得简单介绍下UDP. UDP( User Datagram Protocol )协议是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层——传输层, ...

  6. JAVA中UDP使用

    UDP协议 在有些应用程序中,保持最快的速度比保证每一位数据都正确到达更重要.例如,在实时音频或视频中,丢失数据包只会作为干扰出现.干扰是可以容忍的,但当TCP请求重传或等待数据包到达而它却迟迟不到时 ...

  7. Java中的TCP/UDP网络通信编程

    127.0.0.1是回路地址,用于测试,相当于localhost本机地址,没有网卡,不设DNS都可以访问. 端口地址在0~65535之间,其中0~1023之间的端口是用于一些知名的网络服务和应用,用户 ...

  8. Java中的网络编程

    ​ Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...

  9. HTTP协议报文、工作原理及Java中的HTTP通信技术详解

    一.web及网络基础       1.HTTP的历史            1.1.HTTP的概念:                 HTTP(Hyper Text Transfer Protocol ...

随机推荐

  1. laravel查看执行sql的

    加个监听就好了~~~~而且很简单 1.在routes.php(api.php\web.php)中添加如下语句 Event::listen('illuminate.query', function($s ...

  2. 在LwIP 协议栈移植 Snap 7

    本文欢迎引用,转载. 引用,转载请标明出处! 调试完毕源码将上传到GitHub 为了嵌入式系统与STEP 7 PLC 通过S7 协议通讯,尝试移植 Snap 7 到STM32F407 cpu 上. 今 ...

  3. ShoneSharp语言(S#)的设计和使用介绍系列(4)— 入门概述

    ShoneSharp语言(S#)的设计和使用介绍 系列(4)- 入门概述 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp. ...

  4. #openstack centos6 centos7 kvm镜像制作

    #openstack centos6 centos7 kvm 镜像制作 openstack windows 2008镜像 制作 http://www.cnblogs.com/elvi/p/800129 ...

  5. web更改AD用户密码

    web更改AD用户密码 #web更改AD密码 #网站配置 绑定域名ad.test.cn 功能,更改AD用户密码 #参考http://bbs.51cto.com/thread-1379675-1.htm ...

  6. codeforces 897A Scarborough Fair 暴力签到

    codeforces 897A Scarborough Fair 题目链接: http://codeforces.com/problemset/problem/897/A 思路: 暴力大法好 代码: ...

  7. ConcurrentHashMap\HashMap put操作时key为什么要rehash

    参考java并发编程的艺术一书中,对ConcurrentHashMap的讲解 ConcurrentHashMap使用的是分段锁Segment来保证不同的Segment区域互相不干扰,不存在锁竞争关系, ...

  8. 关于C++编译链接和模板函数

    一,关于编译链接编译指的的把编译单元生成目标文件的过程链接是把目标文件链接到一起的过程编译单元:可以认为是一个.c或者.cpp文件.每个编译单元经过预处理会得到一个临时的编译单元.预处理会间接包含其他 ...

  9. MySQL用户管理及SQL语句详解

    1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysql.user; +--------+--- ...

  10. C# DropDownList 绑定枚举类

    第一种 DropDownList_Franchiser_Type.DataSource = ListTypeForEnum(); DropDownList_Franchiser_Type.DataVa ...