相关知识

UDP

UDP认识

UDP,全称User Datagram Protocol(用户数据报协议),是Internet 协议集支持一个无连接的传输协议。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。

UDP主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向报文的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口,适用端口分别运行在同一台设备上的多个应用程序

UDP的特点(与TCP相比)

正是UDP提供不可靠服务,具有了TCP所没有的优势。无连接使得它具有资源消耗小,处理速度快的优点,所以音频、视频和普通数据在传送时经常使用UDP,偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

  1. UDP有别于TCP,有自己独立的套接字(IP+Port),它们的端口号不冲突。和TCP编程相比,UDP在使用前不需要进行连接,没有流的概念。
  2. 如果说TCP协议通信与电话通信类似,那么UDP通信就与邮件通信类似:不需要实时连接,只需要目的地址;
  3. UDP通信前不需要建立连接,只要知道地址(ip地址和端口号)就可以给对方发送信息;
  4. 基于用户数据报文(包)读写;
  5. UDP通信一般用于线路质量好的环境,如局域网内,如果是互联网,往往应用于对数据完整性不是过于苛刻的场合,例如语音传送等。

以上是对UDP的基本认识,与以前学习的理论相比,接下来的实践更加有趣,实践出真知。

UDP网络Socket编程(Java实现)

首先,熟悉java中UDP编程的几个关键类:DatagramSocket(套接字类),DatagramPacket(数据报类),MulticastSocket(组播)。本篇主要使用前两个。

1、创建客户端

第一步,实例化一个数据报套接字,用于与服务器端进行通信。与TCP不同,UDP中只有DatagramSocket一种套接字,不区分服务端和客户端,创建的时候并不需要指定目的地址(?),这也是TCP协议和UDP协议最大的不同点之一。

public UDPClient(String remoteIP,String remotePort) throws IOException{
this.remoteIP=InetAddress.getByName(remoteIP);
this.remotePort=Integer.parseInt(remotePort);
//创建UDP套接字,系统随机选定一个未使用的UDP端口绑定
socket=new DatagramSocket();
}

第二步, 创建UDP数据报,实现发送和接收数据的方法。UDP发送数据是基于报文DatagramPacket,网络中传递的UDP数据都要封装在这种自包含的报文中。

实现DatagramPacket发送数据的方法:

//定义一个数据的发送方法
public void send(String msg){
try {
//将待发送的字符串转为字节数组
byte[] outData=msg.getBytes("utf-8");
//构建用于发送的数据报文,构造方法中传入远程通信方(服务器)的ip地址和端口
DatagramPacket outPacket=new DatagramPacket(outData,outData.length,remoteIP,remotePort);
//给UDP发送数据报
socket.send(outPacket);
}catch (IOException e){
e.printStackTrace();
}
}

DatagramPacket接收数据的方法:

public String receive(){
String msg;
//准备空的数据报文
DatagramPacket inPacket=new DatagramPacket(new byte[MAX_PACKET_SIZE],MAX_PACKET_SIZE);
try {
//读取报文,阻塞语句,有数据就装包在inPacket报文中,以装完或装满为止
socket.receive(inPacket);
//将接收到的字节数组转为对应的字符串
msg=new String(inPacket.getData(),0,inPacket.getLength(),"utf-8");
} catch (IOException e) {
e.printStackTrace();
msg=null;
}
return msg;
}

可以看到,发送和接收数据中使用DatagramSocket的实例的send和receive方法,这就是数据报套接字的两个重要方法。

通信结束,销毁Socket的方法如下:

public void close(){
if (socket!=null)
socket.close();
}

到这里,客户端已全部完成,等待接下来与服务端的通信...

2、客户端图形界面

现在,设计客户端通信的简单界面,一方面可以更方便的和服务器连续对话通信,另一方面,有了图形界面,体验感更加!图形化界面主要使用JavaFX实现,代码容易看懂。

待补充…… UDP协议网络Socket编程(java实现C/S通信案例) - Charzueus - 博客园 (cnblogs.com)

TCP

TCP(传输控制协议,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP旨在适应支持多网络应用的分层协议层次结构。也就是说,TCP是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。

以上TCP的特点,也正是与UDP的明显不同之处。UDP(用户数据报协议)是一种无连接的、不可靠的、不以字节流传输通信协议。

接着,“三次握手”则是众所周知的一个词,是建立TCP连接的重要过程。

TCP连接的释放也有“四次握手”一说,必须经过2MSL后才真正释放。具体过程如下图:

Socket编程通信

本篇使用Java进行Socket编程,Java的TCP/IP套接字编程将底层的细节进行了封装,其编程模型如图:

我们自顶向下观察,基于TCP的通信,必然有服务端Server和客户端Client。

首先,建立连接。两端分别有一个套接字Socket,用于两者之间的通信。客户端向服务器发送请求,创建socket进行连接。服务端则随时监听客户端发起的请求,接收并创建裂解Socket。

其次,开始通信。服务和客户两端的输入输出流互相通信。逻辑上可理解为通信进程的双方具有两个流(输出流和输入流)。逻辑上可将两个流理解为两个通信管道的全双工通信模式,一个用于向对方发送数据,另一个用于接收对方的数据。

最后,结束通信。客户端访问服务器结束,断开连接,关闭Socket和相关资源(输入输出流等)。服务端监听客户端状态,同时关闭Socket等连接。

待补充…… Java:基于TCP协议网络socket编程(实现C/S通信) - Charzueus - 博客园 (cnblogs.com)

socket网络编程 - 随笔分类 - Charzueus - 博客园 (cnblogs.com)


JAVA 基础

JAVA版本

一文彻底搞懂令人疑惑的Java和JDK的版本命名!_jdk19和jdk1.9-CSDN博客

java编译方法

参考:利用IDEA的Maven创建第一个java程序(helloworld)_idea用maven运行第一个hello-CSDN博客

项目主代码与测试代码

参考:用 IDEA 创建 Maven 版 HelloWorld!-腾讯云开发者社区-腾讯云 (tencent.com)

java FX

(5 封私信 / 80 条消息) 如何给Java应用程序用JavaFX(fxml, css)做界面? - 知乎 (zhihu.com)

JavaFX 图形界面设计_javafx界面设计-CSDN博客

下面这个借鉴性质最高:

孤山的javafx教程——javafx简单入门 - 知乎 (zhihu.com)

方法 作用
setMaxHeight(int); 窗口最大高度
setMaxWidth(int); 窗口最大宽度
setResizable(boolean); 是否允许改变大小
setMinHeight(int); 窗口最小高度
setMinWidth(int); 窗口最小宽度
setMaximized(boolean); 是否最大化
setIconified(boolean); 是否最小化
setFullScreen(boolean); 是否全屏
setAlwaysOnTop(boolean); 窗口是否保持置顶
setY(int) 窗口出生距离屏幕上面的高度
setX(int) 窗口出生举例屏幕左边的宽度
primaryStage.setOpacity(); 透明度
setTitle(String) 设置窗口标题
initStyle(StageStyle); 设置窗口样式,只要知道三个常用的函数,StageStyle.DECORATED是正常,StageStyle.UTILITY没有最大最小化,StageStyle.TRANSPARENT是透明就行;
setScene(Scene) 给窗口设置场景
close(); 关闭窗口

SceneBuilder版:

JavaFx界面设计【SceneBuilder版】适合初学者-CSDN博客

java 多个文件共同执行

Java实现多用户服务器程序设计(互联网程序设计课程 第5讲)_java能不能多new tcpserver-CSDN博客

Maven

1.Maven安装

最全+免费:

JDK和Maven在Windows下安装和配置_windows 安装jdk8 maven3-CSDN博客

理论讲的较好:

maven的安装配置+JDK安装和环境配置——记第一次安装的详细步骤 - 孑然一身在江湖 - 博客园 (cnblogs.com)

2.Maven与JDK的连接

利用IDEA的Maven创建第一个java程序(helloworld)_idea用maven运行第一个hello-CSDN博客

3.关于命令行

验证Maven安装

在命令行中输入以下命令,验证Maven是否成功安装:

mvn -version

如果安装成功,将显示Maven的版本信息。

使用Maven编译项目

现在,您可以使用Maven来编译Java项目了。首先,进入项目的根目录,然后在命令行中输入以下命令:

mvn compile

这将使用Maven编译项目的源代码。编译完成后,您可以在项目的target目录中找到生成的class文件。

运行项目

如果您使用的是Java应用程序,可以使用以下命令来运行项目:

java -jar <jar文件名>

其中,是您的项目生成的jar文件名。如果您的项目是一个Web应用程序,您需要先安装并配置Tomcat服务器,然后部署您的应用程序到Tomcat服务器上运行。

多用户服务器设计过程

JAVA web学习

主要参考这位作者的博客进行学习~: 互联网程序设计_GCTTTTTT的博客-CSDN博客

完成我们的作业主要需要学习其中的1~5讲

JavaFx图形窗口程序设计(互联网程序设计课程 第1讲)_第 1 讲 java 图形窗口程序设计-CSDN博客

JavaFX实现网络对话程序设计(互联网程序设计课程 第2讲)_tcpipjavafx-CSDN博客

JavaFX实现多线程程序设计技术(互联网程序设计课程 第3讲)_javafx多线程-CSDN博客

JavaFX实现网络文件传输程序设计(互联网程序设计课程 第4讲)_javafx 上传-CSDN博客

Java实现多用户服务器程序设计(互联网程序设计课程 第5讲)_新建 chapter05 程序包,然后将单用户版的 tcpserver.java 拷贝进 来,重命名-CSDN博客

向量计算学习

奇技淫巧系列:向量叉乘 - 知乎 (zhihu.com)

通过java实现矩阵的乘法、行列式求值、伴随矩阵和逆矩阵的运算_java 矩阵行列式-CSDN博客

因为我是java8,所以没能用上但是很好~ Java 17 更新(11):支持矢量运算,利好科学计算?-腾讯云开发者社区-腾讯云 (tencent.com)

UDP与TCP+JAVA相关理论的更多相关文章

  1. java 网络通信传输层协议——UDP和TCP

    本文原文由作者“zskingking”发表于:jianshu.com/p/271b1c57bb0b,本次收录有改动. 1.点评 互联网发展至今已经高度发达,而对于互联网应用(尤其即时通讯网专注的即时通 ...

  2. Java网络通信协议、UDP、TCP类加载整理

    网络通信协议 网络通信协议 网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal传输控制协议/英特网互 ...

  3. Java第三阶段学习(八:网络通信协议、UDP与TCP协议)

    一.网络通信协议 1.概念: 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传 ...

  4. Java之网络编程UDP和TCP

    注*部分转来的 第1章 网络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网 ...

  5. java基础(31):网络通信协议、UDP、TCP

    1. 网络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通 ...

  6. JAVA基础学习day24--Socket基础一UDP与TCP的基本使用

    一.网络模型 1.1.OIS参考模型 1.2.TCP/IP参考模型 1.3.网络通讯要素 IP地址:IPV4/IPV6 端口号:0-65535,一般0-1024,都被系统占用,mysql:3306,o ...

  7. 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

  8. 聊聊UDP、TCP和实现一个简单的JAVA UDP小Demo

    最近真的比较忙,很久就想写了,可是一直苦于写点什么,今天脑袋灵光一闪,觉得自己再UDP方面还有些不了解的地方,所以要给自己扫盲. 好了,咱们进入今天的主题,先列一下提纲: 1. UDP是什么,UDP适 ...

  9. java 网络通信协议、UDP与TCP

    一 网络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定 的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通 ...

  10. java 基本理论知识点

    通过JAVAOO 的笔试后,总结了一些理论的知识点. 1.main方法是怎么写的 public static void main(String [] args){}//最习惯的 public stat ...

随机推荐

  1. 使用 OpenFunction 在任何基础设施上运行 Serverless 工作负载

    作者: 霍秉杰:KubeSphere 可观测性.边缘计算和 Serverless 团队负责人,Fluent Operator 和 OpenFunction 项目的创始人,还是多个可观测性开源项目包括 ...

  2. KubeSphere 3.3.2 版本正式发布!

    距离上一个版本 v3.3.1 发布,已经过了 3 个多月,今天我们很高兴宣布 KubeSphere v3.3.2 正式发布! 此版本由 68 位贡献者参与代码提交,感谢各位贡献者对 KubeSpher ...

  3. 如何在 ubuntu 上搭建 minio

    由于腾讯的对象存储服务器(COS)的半年免费试用期已过,所以寻思鼓捣一下 minio,试着在自己的服务器上搭建一套开源的 minio 对象存储系统. 单机部署基本上有以下两种方式. 直接安装 最基础的 ...

  4. vue暗含玄机的v-for指令

    由于是多个事项,那么这个数据模型是一个数组:为了显示这些代办事项我们首先添加一些样本数据 <script> export default { data() { return { title ...

  5. Mysql(2)—SQL语法详解(通俗易懂)

    一.关于SQL 1.1 简介 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准编程语言.它主要用于数据的查询.插入.更新和删除等操作.SQL ...

  6. DRF-Version组件源码分析

    1. 版本管理组件源码分析 注意点: 不同的versioning_class区别:实例化后得到的对象versioning_scheme里面的方法不同(函数同名,但是处理逻辑不同) def determ ...

  7. 在昇腾Ascend 910B上运行Qwen2.5推理

    目前在国产 AI 芯片,例如昇腾 NPU 上运行大模型是一项广泛且迫切的需求,然而当前的生态还远未成熟.从底层芯片的算力性能.计算架构的算子优化,到上层推理框架对各种模型的支持及推理加速,仍有很多需要 ...

  8. cgo:go数组转c数组调用c函数

    package main /* #include <stdio.h> void processInt2DArray(int* arr, int rows, int cols) { for ...

  9. 汉文博士 0.5.9 测试版发布:增加统一码中日韩表意文字扩展 G 区的构型检索和 GB/T2312、GBK字表

    之前我们采用的构型数据库在 2019 年起未见更新,但我最近在该数据库的页面找到了该数据库的基础数据源(CHISE),而该数据源上提供了中日韩表意文字扩展 G 区的构型数据.这样,在构型检索中支持扩展 ...

  10. luckysheet 初始化数据 以及 sheet显示数据

    主要说明属性 表格初始化时使用一维数组格式的 celldata,初始化完成后转化为二维数组格式的data作为存储更新使用,celldata不再使用. 如果需要将data拿出来作为初始化数据,则需要执行 ...