java中的udp_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发信息

来源:https://www.cnblogs.com/lizhangyong/p/8146088.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值