【三、接口协议与抓包】TCP/UDP协议的基本实现

你好啊!我是山茶,一个持续探索 AI + 测试之路的程序员。

TCP 协议与 TCP/IP 协议之间的关系,TCP 与 UDP 包含在 TCP/IP 中,TCP/IP 是协议簇名称

TCP (传输控制协议) 和 UDP (用户数据报协议) 是 TCP/IP 协议簇中,两个互不相同的传输协议

TCP/IP 协议簇包括应用层,传输层,网络层,网络访问层等多层,OSI 网络模型及 TCP/IP 模型见“网络模型”

TCP协议

可靠传输协议,基于连接通过在发送和接收方之间建立可靠的通信通道来确保数据的准确传递

使用Java实现 TCP 通信

// 服务端等待客户端建立连接
package TcpServer;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;/*
* 1、建立服务的端口ServerSocket
* 2、等待用户的连接 accept
* 3、接收消息
* */
public class TcpServer {public static void main(String[] args) throws Exception {fileServer();}public static void fileServer() throws Exception{
//        1、创建服务ServerSocket serverSocket = new ServerSocket(9000);
//        2、监听客户端的连接Socket socket = serverSocket.accept();
//        3、获取输入流InputStream is = socket.getInputStream();
//        4、文件输出FileOutputStream fos = new FileOutputStream(new File("receive.txt"));byte[] buffer = new byte[1024];int len;while ((len=is.read(buffer))!=-1){fos.write(buffer,0,len);}
//        5、通知客户端接收完成OutputStream os = socket.getOutputStream();os.write("我接收完毕了,你可以断开了".getBytes());
//        6、关闭资源fos.close();is.close();socket.close();serverSocket.close();}
}
// 客户端与服务端建立通信链接
package TcpClient;import java.io.*;
import java.net.InetAddress;
import java.net.Socket;/*
* 1、通过Socket连接服务器
* 2、发送消息
* */
public class TcpClient {public static void main(String[] args) throws Exception{fileClient();}public static void fileClient() throws Exception{
//        1、创建一个socket连接Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
//        2、创建一个输出流OutputStream os = socket.getOutputStream();
//        3、读文件FileInputStream fis = new FileInputStream(new File("aaa.txt"));
//        4、写出文件byte[] buffer = new byte[1024];int len;while ((len=fis.read(buffer))!=-1){os.write(buffer,0,len);}
//        5、通知服务器,我已经传输完了socket.shutdownOutput();//        6、确定服务器接收完毕,才能断开连接InputStream inputStream = socket.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer2 = new byte[1024];int len2;while ((len2=inputStream.read(buffer2))!=-1){baos.write(buffer2,0,len2);}System.out.println(baos.toString());//        7、关闭资源fis.close();os.close();socket.close();}
}

UDP协议

UDP 是一种无连接的协议,它不提供可靠性和有序传输

// 服务端等待客户端发送数据
package UdpServer;import java.net.DatagramPacket;
import java.net.DatagramSocket;//等待发送端的链接
public class UdpServer {public static void main(String[] args) throws Exception {learnUdpServer();}public static void learnUdpServer() throws Exception{
//        开放端口DatagramSocket socket = new DatagramSocket(9090);
//        接收数据包byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);socket.receive(packet);System.out.println(packet.getAddress().getHostAddress());System.out.println(new String(packet.getData(),0,packet.getLength()));
//        关闭连接socket.close();}
}
// 客户端发送数据
package UdpClient;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/*
* 不需要连接服务器
* UDP没有服务器客户端的概念,任何机器都可以互相发送消息,被称为“发送端”和“接收端”。
* */
public class UdpClient {public static void main(String[] args) throws Exception {learnUdpClient();}public static void learnUdpClient () throws Exception{
//        1、建立一个Socket,DatagramSocket数据报。DatagramSocket socket = new DatagramSocket();
//        2、建个包String msg = "你好啊 ,了解更过内容,请公众号搜索:程序员山茶";InetAddress localhost = InetAddress.getByName("localhost");int port = 9090;DatagramPacket pack = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);
//        3、发送包socket.send(pack);
//        4、关闭连接socket.close();}
}

TCP与UDP传输协议见的

作者简介:

程序员山茶,一个工作5年,并坚持探索测试之路的测试开发工程师。曾混迹于互联网大厂、IOTA行业领航企业、安全行业、大数据行业领航企业,欢迎和我一起沟通交流。公众号【程序员山茶】


欢迎关注我,  和我一起探索测试之路,终身成长

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/488494.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法相关题解20240224

数据结构与算法相关题解 一、1. 两数之和二、121. 买卖股票的最佳时机三、122. 买卖股票的最佳时机 II四、169. 多数元素五、229. 多数元素 II六、55. 跳跃游戏七、45. 跳跃游戏 II 一、1. 两数之和 简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数…

2024全国水科技大会暨流域水环境治理与水生态修复论坛(六)

论坛召集人 冯慧娟 中国环境科学研究院流域中心研究员 刘 春 河北科技大学环境与工程学院院长、教授 一、会议背景 为深入贯彻“山水林田湖是一个生命共同体”的重要指示精神,大力实施生态优先绿色发展战略,积极践行人、水、自然和谐共生理念&…

ETL:数据转换与集成的关键过程

ETL:数据转换与集成的关键过程 在现代数据驱动的世界中,有效地管理和处理数据对于企业的成功至关重要。ETL(提取、转换、加载)是一种关键的数据处理过程,有助于将数据从源系统提取、清洗、转换并加载到目标系统中&…

【Spring】循环依赖

目录标题 什么是循环依赖循环依赖场景Java SE 演示Spring 容器演示三级缓存核心知识三级缓存四大方法三级缓存中的迁移 三级缓存源码分析源码思维导图 源码图例课前问题推荐阅读 循环依赖是什么?循环依赖的场景有哪一些?三级缓存分别是什么?三…

【Docker 的安装:centos】

文章目录 1 :peach:各版本平台支持情况:peach:2 :peach:CentOS 安装:peach:2.1 :apple:安装依赖:apple:2.2 :apple:安装 Docker:apple:2.3 :apple:实战经验:apple:2.3.1 :lemon:Docker 镜像源修改:lemon:2.3.2 :lemon:Docker 目录修改:lemon: 1 🍑各版本平台支持情况…

TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理

TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理 各位大佬,这是我的自学笔记,如有错误请指正,也欢迎在评论区学习交流,谢谢! CUDA编程模型 我们使用CUDA_C语言进行CUDA编程&am…

Python爬虫之点触验证码的识别

点触验证码的识别 除了极验验证码,还有另一种常见且应用广泛的验证码,即点触验证码。 可能你对这个名字比较陌生,但是肯定见过类似的验证码,比如 12306 就是典型的点触验证码。 直接点击图中符合要求的图。所有答案均正确&#…

PLC_博图系列☞基本指令“赋值取反”

PLC_博图系列☞基本指令“赋值取反” 文章目录 PLC_博图系列☞基本指令“赋值取反”背景介绍/:赋值取反说明参数示例 关键字: PLC、 西门子、 博图、 Siemens 、 赋值取反 背景介绍 这是一篇关于PLC编程的文章,特别是关于西门子的博图软…

震撼升级!24版短视频矩阵全开源码,打造您的AI智能剪辑帝国

应用介绍 私信我拿演示后台 亲爱的创业者和内容创作者们,我们为您带来了业界颠覆性的全新产品——24版短视频矩阵全开源码。这不仅是一次技术的飞跃,更是您在短视频领域实现高效创作与规模化运营的一把利剑。 此次升级,我们彻底打破常规&…

Docker 第十九章 : 阿里云个人镜像仓使用

Docker 第十九章 : 阿里云个人镜像仓使用 本章知识点: 如何创建镜像库,如何设置密码,如何登录与退出个人镜像仓,如何本地打镜像,如何将本地镜像推送到个人镜像库。 背景 在项目YapiDocker部署中,因读取mongo:latest 版本不一致,导致后续执行步骤的异常。遇到此场景…

责任链模式与spring容器的搭配应用

背景 有个需求,原先只涉及到一种A情况设备的筛选,每次筛选会经过多个流程,比如先a功能,a功能通过再筛选b功能,然后再筛选c功能,以此类推。现在新增了另外一种B情况的筛选,B情况同样需要A情况的筛…

2024年机械制造业行业转型展望

行业变革中的挑战与机遇 2024年将是全球工业格局发生重大变化的一年。CADENAS着眼于最重要的五大主题:数字化转型、技能短缺、供应链、可持续发展和人工智能(AI)。这些领域为全球公司带来了挑战和机遇。 数字化转型:通向未来之路…