首页 技术 正文
技术 2022年11月18日
0 收藏 607 点赞 3,446 浏览 1679 个字

我在《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发信息  
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,086
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,561
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,410
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,183
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,820
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,903