IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Java中的UDP通信和TCP通信 -> 正文阅读

[网络协议]Java中的UDP通信和TCP通信

目录

前言

一、UDP发送数据与接收数据

1.案例演示:

案例需求:

二、TCP发送数据与接收数据

1.案例演示:

案例需求

总结


前言

UDP协议简介:

用户数据报协议(User Datagram Protocol)

UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台 计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。 由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输。例如视频会议通常采用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太 大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在 传输重要数据时不建议使用UDP协议。

TCP协议简介: ? ? ? ??
传输控制协议 (Transmission Control Protocol)
TCP 协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数 据,它提供了两台计算机之间可靠无差错的数据传输。在TCP 连接中必须要明确客户端与服务器端,由 客户端向服务端发出连接请求,每次连接的创建都需要经过“ 三次握手
三次握手: TCP 协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠
第一次握手,客户端向服务器端发出连接请求,等待服务器确认
第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求
第三次握手,客户端再次向服务器端发送确认信息,确认连接
完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛。例如上传文件、下载文件、浏览网页等

提示:以下是本篇文章正文内容,下面案例可供参考



一、UDP发送数据与接收数据

UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念。

Java提供了DatagramSocket类作为基于UDP协议的Socket

构造方法
? ? ? ? ? ? ? ? ? ? ? ? ?方法名称? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?说明
DatagramSocket()
创建数据报套接字并将其绑定到本机地址上的任何可用端口
DatagramPacket(byte[] buf,int len,InetAddress
add,int port)
创建数据包 , 发送长度为 len 的数据包到指定主机的指定端口
DatagramPacket(byte[] buf, int len)
创建一个 DatagramPacket 用于接收长度为 len 的数据包
相关成员方法
方法名说明
void send(DatagramPacket p)
发送数据报包
void close()
关闭数据报套接字
void receive(DatagramPacket p)
从此套接字接受数据报包
byte[] getData()
返回数据缓冲区
int getLength()
返回要发送的数据的长度或接收的数据的长度

UDP发送数据步骤:

1.创建发送端的 Socket 对象 (DatagramSocket)
2.创建数据,并把数据打包 调用 DatagramSocket 对象的方法发送数据
3.关闭发送端
UDP接收数据步骤:
1.创建接收端的 Socket 对象 (DatagramSocket)
2.创建一个数据包,用于接收数据
3.调用 DatagramSocket 对象的方法接收数据
4.解析数据包,并把数据在控制台显示
5.关闭接收端

1.案例演示:

案例需求:

UDP发送数据:数据来自于键盘录入,直到输入的数据是stop ,发送数据结束
UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采用死循环接收

1.新建一个类SendDemo作为发送端

public class SendDemo {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket();
        //数据来自键盘录入,转成字符缓冲输入流
        InputStreamReader inputStreamReader = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(inputStreamReader);

        String line;
        while ((line = br.readLine())!=null){
            //当发送stop时,跳出循环,停止程序
            if (line.equals("stop")){
                break;
            }
            byte[] bytes = line.getBytes();
            //xxx为要发送的ip地址,这里我选的是自己主机的IP,12345是端口号
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("xxx.xxx.x.xxx"),12345);
            ds.send(dp);
        }

        ds.close();
    }
}

2.再建一个类ReceiveDemo作为接收端

public class ReceiveDemo {
    public static void main(String[] args) throws IOException {
        //此处端口号要与发送端一致
        DatagramSocket ds = new DatagramSocket(12345);
        while (true){
            byte[] bytes = new byte[1024];
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
            ds.receive(dp);
            int length = dp.getLength();
            byte[] data = dp.getData();
            String s = new String(data,0,length);

            System.out.println("数据是:"+s);
        }
    }
}

3.进行测试,启动程序,发送端在控制端输入木子日月,接收端收到数据



二、TCP发送数据与接收数据

Java 对基于 TCP 协议的的网络提供了良好的封装,使用 Socket 对象来代表两端的通信端口,并通过Socket产生 IO 流来进行网络通信。
Java 为客户端提供了 Socket 类,为服务器端提供了 ServerSocket
构造方法
方法名说明
Socket(InetAddress address,int port)?
创建流套接字并将其连接到指定 IP 指定端口号
Socket(String host, int port)
创建流套接字并将其连接到指定主机上的指定端口号
ServletSocket(int port)
创建绑定到指定端口的服务器套接字

相关成员方法
方法名????????????????说明
InputStream getInputStream()
返回此套接字的输入流
OutputStream getOutputStream()
返回此套接字的输出流
Socket accept()
监听要连接到此的套接字并接受它

1.案例演示:

案例需求

客户端:数据来自于键盘录入, 直到输入的数据是stop ,发送数据结束
服务端:接收到数据在控制台输出
1.新建一个类作为客户端
public class ClientDemo {
    public static void main(String[] args) throws IOException {
        //创建一个客户端Socket,xxx为ip地址,10086为测试的端口号
        Socket s = new Socket("xxx.xxx.x.xxx",10086);

        //数据来自键盘录入,直到输入数据为stop,停止
        InputStreamReader is = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(is);

        //封装输出流
        OutputStream outputStream = s.getOutputStream();
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
        BufferedWriter bw = new BufferedWriter(outputStreamWriter);

        String line;
        while ((line=br.readLine())!=null){
            if (line.equals("stop")){
                break;
            }
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        s.close();
    }
}

2.创建一个类作为服务端

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        //服务端Socket
        ServerSocket ss = new ServerSocket(10086);

        //监听
        Socket accept = ss.accept();

        //获取,由字节输入流到字符输入流再到字符输入缓冲流
        InputStream inputStream = accept.getInputStream();
        InputStreamReader is = new InputStreamReader(inputStream);
        BufferedReader br = new BufferedReader(is);

        String line;
        while ((line= br.readLine())!=null){
            System.out.println(line);
        }

        ss.close();
    }
}

3.进行测试,启动程序,客户端发送木子日月,服务端接收数据。(这里需要先启动服务端,否则会报错)




总结

简单介绍了UDP通信和TCP通信中的发送数据和接收数据,要注意IO流的使用。

还可以扩展为发送文件。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 10:33:32  更:2021-09-26 10:36:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/21 6:53:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码