相关知识

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. 云原生周刊:Knative 1.15 版本发布|2024.8.5

    开源项目推荐 helm-secrets helm-secrets 是一个 Helm 插件,用于动态解密加密的 Helm 值文件. Tofu Controller Tofu Controller(以前称 ...

  2. 电脑端 itunes 备份保存路径修改方法

    默认在c盘,重做系统就会丢失. 1.先删除C:\Users\你的用户名\AppData\Roaming\Apple Computer里的 MobileSync文件夹(首次安装iTunes没有,要先运行 ...

  3. ESP32+L298N+MQTT+4G无线远程监控+四驱动小破车

    ESP32+L298N+MQTT+4G无线远程监控+四驱动小破车 小车源代码 注意修改WIFI 信息 #include <analogWrite.h> #include <WiFi. ...

  4. github/gitee个人博客到底是什么一个运行原理?

    本文主要讲的是GitHub.Gitee这样的代码存储网站上提供的个人博客建站的原理分析,需要注意的是,本文并不介绍GitHub.Gitee上建立个人blog的操作步骤,本文只介绍原理,不介绍实操步骤. ...

  5. CCF网站提供的资源

    1. 电子刊物,如<CCF通讯> 实时更新:http://www.ccf.org.cn/dl/publications/ 过往期刊:http://history.ccf.org.cn/si ...

  6. 11.Kubernetes控制器Controller详解

    Kubernetes控制器Controller详解 Statefulset Statefulset主要是用来部署有状态应用 对于StatefulSet中的Pod,每个Pod挂载自己独立的存储,如果一个 ...

  7. HTTP相关返回值异常如何解决(上篇)

    ​ 今天我们讲讲HTTP相关返回值异常如何解决(实例持续更新中) 一.HTTP介绍 HTTP(超文本传输协议,Hypertext Transfer Protocol)是用于在网络上进行数据交换的应用层 ...

  8. Ubuntu apt-cache命令查找可用软件包

    本文GoFace给大家讲解下在Ubuntu及相同包管理的linux系统下如何查找可用软件包.在Ubuntu上大家一般使用apt-get安装软件,如果想查找某一包软件仓库中是否有,并不是使用apt-ge ...

  9. ArrayList removeRange方法分析

    <ArrayList原码分析>一文中提到了"为什么removeRange(int fromIndex,int toIndex)是protected的?" 先给出remo ...

  10. python之在线书籍

    人生苦短,我用python, 这里罗列一些可以查看python电子书的相关链接,平时没事多看看,一定会大有裨益!!! python3-cookbook[https://python3-cookbook ...