相关知识

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. HDU-ACM 2024 Day1

    T1009 数位的关系(HDU 7441) 考虑 \(l = r\) 的情况,此时只要计算一个数字,我们将其展开为一个字符串 \(S\).设 \(f_{i, j, k}\) 表示考虑了 \(S\) 的 ...

  2. Solon 3.0 新特性:HttpUtils 了解一下

    Solon 3.0 引入一个叫 HttpUtils 小插件,这是一个简单的同步 HTTP 客户端,基于 URLConnection 适配(也支持切换为 OkHttp 适配).使得编写 HTTP 客户端 ...

  3. 别人可以访问本项目的ip地址

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  4. centos下搭建php开发环境(lamp)

    由于个人非常喜欢爱linux系开发php项目. 因为某些原因,经常需要手动搭建环境 经常在网上找到的教程经常不太一样 虽然最终都能完成搭建,但是总是觉得不太爽 还不如自己写一篇,需要的时候肯定能找到 ...

  5. 通过duxapp提供的基础方法、UI组件、全局样式,快速编写项目

    使用duxapp,我是如何实现快速完成项目开发的? 像下面这个例子,这个项目有140多个页面,但是真实的开发时间,在熟练使用duxapp的情况下,不会超过两周,并且可以将它兼容APP.小程序.H5 这 ...

  6. UniswapV2Pair细节

    UniswapV2Pair合约是Uniswap V2协议中的核心部分,用于管理流动性池.代币交换.流动性代币的铸造和销毁等操作.以下是对UniswapV2Pair合约中所有主要方法及其参数的详细讲解. ...

  7. Android Hybird架构之整合XwalkView,让你的App内置chromium内核

    使用XwalkView的目的无非是为了提升Android4.4以下版本(非chromium内核)的Html5渲染性能,并且能够使得H5页面在众多定制化的ROM上拥有一致的体验. 当然了,App内置Ch ...

  8. 数据结构课程设计报告-C 语言整数单链表的表示和实现

    数据结构课程设计报告 专业名称:计算机科学与技术 课程名称:数据结构        实训题目:整数单链表的表示和实现                            实训环境:C 语言实现( D ...

  9. paramiko模块的使用

    简介: Paramiko是基于Python(2.7,3.4+)版本实现和封装了SSHv2协议,底层是用cryptography实现,我们如果希望远程登录主机或者远程下载或者上传文件到远程主机都可以使用 ...

  10. python之日志logging

    转载:https://blog.csdn.net/weixin_43790276/article/details/101944628 logging 模块是 Python 内置的标准模块,用于输出代码 ...