当前位置: 首页 > article >正文

TCP/IP--Socket套接字--JAVA

目录

一、概念

二、分类

1.流套接字

2.数据报套接字

三、UDP数据报套接字编程

1.API介绍

 2.基于UDP实现简单回显服务器


一、概念

Socket套接字,是由系统提供⽤于⽹络通信的技术,是基于TCP/IP协议的⽹络通信的基本操作单元。
基于Socket套接字的⽹络程序开发就是⽹络编程。

二、分类

1.流套接字

使用传输层TCP协议。TCP协议特点:有链接、可靠传输、面向字节流、有接收缓冲区,也有发送缓冲区、大小不限。

对于字节流来说,可以简单的理解为,传输数据是基于IO流,流式数据的特征就是在IO流没有关闭的 情况下,是⽆边界的数据,可以多次发送,也可以分开多次接收。

2.数据报套接字

使用传输层UDP协议。

以下为UDP的特点: ⽆连接 、不可靠传输、 ⾯向数据报 、有接收缓冲区,⽆发送缓冲区 、⼤⼩受限:⼀次最多传输64k。
对于数据报来说,可以简单理解为发送数据是一块儿一块儿的,发送一块儿数据假如是100字节,那么接收也必须是100字节,不能分一百次每次1字节的接收。

三、UDP数据报套接字编程

1.API介绍

Socket API本身是操作系统的功能,JDK基于操作系统的API进行了封装形成了我们JAVA版本的API。

以下介绍的是UDP的Socket API:

DatagramSocket和DatagramPacket。我们查阅Java文档可以看到这两个Api的详细信息Java Documentation - Get Started。

通过文档我们可以看到DatagramSocket的构造方法:

以及对它详细的解释 :

对它来说主要的方法有三个:

简单来说,我们知道计算机中的“文件”通常是一个广义的概念。文件还能代指一些硬件设备。

那么我们就可以将网卡抽象成Socket文件,操作网卡的时候就和操作普通文件差不多分为三步,打开-->读写-->关闭。由于操作网卡,直接操作是不好操作的,所以我们将操作网卡转换成操作socket文件,socket文件就相当于“网卡的遥控器”。 

基于以上这些概念,我们可以理解到DatagramSocket的构造方法就相当于打开文件,创建socket的时候就会关联上一个端口号,使用端口号来区分主机上不同的应用程序。

receive和send方法就相当于读和写。close就是关闭文件。DatagramPacket就表示一个完整的数据报。

DatagramPacket:

UDP数据报的载荷数据就可以通过构造方法来指定。

 2.基于UDP实现简单回显服务器

对于回显服务器来说,请求和响应是相同的。

首先我们需要定义一个DatagramSocket对象。我们知道对于一个服务器来说,客户端啥时候发请求,发多少个请求都是我们无法预测的,因此服务器中通常都要有一个死循环持续不断的尝试读取客户端的请求数据,也就是7*24小时运行。

以上代码便实现了一个简单的回显服务器 。 

我们还可以在简单写一个客户端来查看运行效果。

运行结果如下:

当然我们也可以在客户端加一个while循环。 


http://www.kler.cn/a/400820.html

相关文章:

  • 深入解析大带宽服务器:性能优势与选择指南
  • 高效工具推荐:基于WebGPU的Whisper Web结合内网穿透远程使用指南
  • 每日一练 | 包过滤防火墙的工作原理
  • Java 全栈知识体系
  • 【DQ Robotics】基于SVD的全秩矩阵逆
  • SpringBoot源码解析(四):解析应用参数args
  • Affleck–Kennedy–Lieb–Tasaki (AKLT) 态
  • 阿里云通义大模型团队开源Qwen2.5-Coder:AI编程新纪元
  • 【qt】控件3
  • python+Django+MySQL+echarts+bootstrap制作的教学质量评价系统,包括学生、老师、管理员三种角色
  • php 与 thinkphp 13 张 表 关联 查询,a.pry_key=b.pry_key and c.pry_key= b.pry_key 代码示例
  • 十四、SpringMVC的执行流程
  • nginx源码安装配置ssl域名
  • 设计模式之装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)
  • PHP 展开运算符 (...) 使用笔记
  • a-tree-select异步加载回显时显示异常bug
  • 大数据-226 离线数仓 - Flume 优化配置 自定义拦截器 拦截原理 拦截器实现 Java
  • .NET架构师学习大纲
  • 无人机动力系统测试-实测数据与CFD模拟仿真数据关联对比分析
  • HTTP 安全头配置:如何配置 HTTP 安全头来保护应用
  • python调用MySql保姆级教程(包会的)
  • 前端算法:树(力扣144、94、145、100、104题)
  • Linux配置yum源练习
  • 学习笔记029——Ubuntu安装Nginx
  • 机器学习——期末复习 重点题归纳
  • 学习笔记022——Ubuntu 安装 MySQL8.0版本踩坑记录