JavaAPI之网络编程UDP/TCP简述及示例

STM32 无线充电接收端硬件设计:从 LC 谐振到 PWM 控制的 5 大关键电路解析 本文深入解析了基于STM32的无线充电接收端硬件设计,重点探讨了LC谐振倍压整流、INA282电流采样、IR2104S半桥驱动、超级电容保护及STM32最小系统等5大关键电路。针对超级电容的恒功率充电需求,详细介绍了PID控制算法优化及PCB设计实战要点,帮助工程师提升无线充电系统的效率和可靠性。 阅读详情

网络通信三要素

1、 IP地址

2、 端口号:用于标识进程的地址,不同的进程端口号不同,同一台计算机端口号不可重复

3、 信息传输协议:即计算机通信规则

a)      TCP协议:TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。

b)      UDP协议:UDP是一种简单的面向数据报、无连接、传输层协议,并且保留了信息边界。UDP不提供错误校正,不保证有序,无法去重复,没有流量控制和拥塞控制,不能保证数据一定到达目的地,但是可以通过校验和提供错误侦测。UDP提供的的是不可靠传输,因此要有应用层来提供这些功能。每个数据包大小限制在64k。

UDP开发步骤

Socket是网络编程提供的一种机制,通信的两端都要有Socket,网络通信其实就是Socket之间的通信。

服务端:

package UDPDemo;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class Service {
    public static void main(String[] args) {
        //创建UDP服务端对象,必须指定端口号
        DatagramSocket ds=null;
        //定义接收的数据包
        DatagramPacket dp=null;
        try {
            ds=new DatagramSocket(10000);
            //定义接收数据的字节数组
            byte[] bytes=new byte[1024];
            dp=new DatagramPacket(bytes,bytes.length);
            //接收包
            ds.receive(dp);
            //获得数据包中的数据
            byte[] bytesData=dp.getData();
            //获得数据包长度
            int len=dp.getLength();
            //组装接收的数据
            String data=new String(bytesData,0,len);
            //在服务端打印数据
            System.out.println("客户端说:"+data);


            //当服务端接收到来自客户端的数据,纪要反馈消息给客户端,以下是反馈的消息
            //定义要返回的消息的字符串
            String str="您好,客户端,已收到您的消息!";
            //生成字节数组
            byte[] bytes1=str.getBytes();
            //将客户端对象重新定义
            ds=new DatagramSocket();
            //生成要发送给客户端的数据包,这里要指定字节数组,字节数组长度,IP和端口号
            dp=new DatagramPacket(bytes1,bytes1.length, InetAddress.getByName("127.0.0.1"),10001);
            //发送数据
            ds.send(dp);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (ds!=null){
                ds.close();
            }
        }
    }
}

客户端:

package UDPDemo;

import java.io.IOException;
import java.net.*;

public class Client {
    public static void main(String[] args) {
        //创建客户端的直接子对象
        DatagramSocket ds=null;
        try {
            ds=new DatagramSocket();
            String say="您好,服务端!";
            //生成发送内容的字节数组
            byte[] bytes=say.getBytes();
            //创建发送包,必须指定字节数组,数组长度,ip地址,端口号
            DatagramPacket dp=new DatagramPacket(bytes,bytes.length, InetAddress.getByName("127.0.0.1"),10000);
            //发送数据包
            ds.send(dp);


            //当服务端接收到客户端发送去数据包后,会向客户端返回消息,以下代码是用来接收服务端返回的消息
            //定义客户端端口号为100001
            ds=new DatagramSocket(10001);
            //定义用于接收服务端数据包的字节数组
            byte[] bytes1=new byte[1024];
            //定义接收数据包
            DatagramPacket dp1=new DatagramPacket(bytes1,bytes1.length);
            //接收服务端反馈的数据
            ds.receive(dp1);
            //组装接收的数据
            String str=new String(dp1.getData(),0,dp1.getLength());
            //在客户端控制台打印数据
            System.out.println("服务端说:"+str);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (ds!=null){
                ds.close();
            }
        }
    }
}

我们启动时,先启动服务端再启动客户端,运行结果:

服务端:


客户端:


TCP开发步骤

服务器端:

package TCPDemo;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Service {
    public static void main(String[] args) {
        //创建服务器端的服务套接字,指定端口号
        ServerSocket ss=null;
        try {
            ss=new ServerSocket(10000);
            //创建一个Socket,并等待客户端链接,直接到接受到了请求
            Socket s=ss.accept();

            //获得连接通道的输入输出流对象(字节流)
            OutputStream os=s.getOutputStream();
            InputStream is=s.getInputStream();
            //包装字节流
            BufferedReader br=new BufferedReader(new InputStreamReader(is));

            //读取数据
            String string=null;
            while ((string=br.readLine())!=null) {
                //在服务端控制台输出
                System.out.println("客户端说:" + string);
            }

            //当服务端接收到客户端发来的消息后,将反馈一个消息给客户端,以下代码实现此功能

            os.write("您好,客户端,消息已收到!".getBytes());
            //关闭输出流
            s.shutdownOutput();

            os.close();
            br.close();
            is.close();
            s.close();
            ss.close();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {

        }
    }
}

客户端:

package TCPDemo;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        //创建套接字对象,去请求服务器的ServletSocket
        Socket s=null;
        try {
            s=new Socket("127.0.0.1",10000);
            //获得连接通道的输入输出流对象(字节流)
            OutputStream os=s.getOutputStream();
            InputStream is=s.getInputStream();
            //包装字节输入流
            BufferedReader br=new BufferedReader(new InputStreamReader(is));
            //传输数据
            os.write("您好,服务端!".getBytes());
            //关闭输出流
            s.shutdownOutput();
            //当服务端接受到客户端发送的数据,会反馈给客户端消息。以下代码为客户端接收服务端反馈的消息
            String string=null;
            while ((string=br.readLine())!=null) {
                //在客户端控制台输出
                System.out.println("服务端说:" + string);
            }
            br.close();
            is.close();
            os.close();
            s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我们启动时,先启动服务端再启动客户端,运行结果:

服务端:


客户端:




机器学习【学校智慧食堂及其应用】 本文主要介绍机器学习【智慧食堂及其应用】 阅读详情

相关推荐

vivado2020.1使用vitis生成QSPI启动文件报错

在使用vivado2020.1使用vitis,生成QSPI启动文件时会报错,data2mem命令无法识别,这是因为data2mem是xilinx7series芯片的命令,当使用ultrascale/ultrascale+芯片时则需要使用updatemem命令,这或许是vitis的一个bug吧,明明选择的是ultrascale的芯片,却一直调用打她mem命令,挺麻烦的,需要手动执行,在XSCT console窗口执行的命令如下: updatemem -force -meminfo \ F:/xc7z35t/x

qq_32134427的博客 2336

网络套接字/TCP/UDP 以及常见API的详解

计算机之间的传输媒介是光信号和电信号,通过“频率“ 和 ”强弱“ 来表示0 和 1 这样的信息 。 要想传递各种不同的信息 ,就要提前约定好双方的数据格式。 协议——————一种双方的事先约定 TCP/IP五层或四层模型 物理层: 物理层负责光信号/电信号的传递方式, eg:双绞线网线 物理层的能力决定双绞线的最大传输能力, 集线器工作在物理层 数据链路层:负责数据帧的传送和识别。 eg:...

快乐星球 1909

NMS非极大值抑制算法原理

NMS非极大值抑制算法

pywin 3501

TCP/IP、TCP、UDP、HTTP、Socket区别与联系

一、TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个具有四层体系结构的协议族。 自上而下分为:应用层、传输层、网络层、物理链路层。 如下图:    图1 应用层协议:HTTP、FTP、TELNET、SMTP、DNS等协议 传输层协议:TCP、UDP协议 网络层协议:ICMP、IP、IGM

Peter的专栏 2230

控制障碍函数(Control Barrier Function,CBF) 二、示例

使用一个经典简单的示例讲解CBF的推导

Lyajpunov的博客 6431

Z-Image Turbo LoRA训练全流程:从数据标注到模型部署的保姆级指南(附ai-toolkit配置)

本文提供了一份详尽的Z-Image Turbo LoRA模型训练全流程指南,涵盖从数据准备、智能标注、参数调优到最终模型部署与Z-Image集成的每个环节。重点解析了使用ai-toolkit训练整合包进行高效训练的核心技巧与避坑方法,旨在帮助用户稳定训练出高质量的专属角色模型。

weixin_29088655的博客 962

2、TCP与UDP协议

解释了TCP和UDP的概念,给出了一些API接口的示例

AZhi 257

基于STM32+RFID设计的宿舍检修管理系统

设计一个上位机,用来管理查看维修检修信息,当维修寝室的设备或者检修完成时,通过STM32上的RC522刷一下这个寝室的IC卡,识别这是哪个寝室,识别成功后在软件上弹出一个对话框,填写本次维修或者检修的事件,填写完毕点击提交即可。...

2555

Linux Socket通信:一文详解TCP通信API用法

Linux所有的硬件接口都被当成一个文件来操作,相应的,这些硬件接口也有对应的文件操作符。比如,文件操作符0表示标准输入流,对应的硬件是键盘;文件操作符1表示标准输出流,对应的硬件是显示器。这么看的话,套接字被当成文件就容易理解了。而且,Linux通过read()函数和write()函数进行文件的读写,同样,也可以用这两个函数对其他计算机发送和接收消息。.........

a1367666195的博客 955

SpringBoot 整合Jasypt 实现配置文件加密读取操作详解

SpringBoot 整合Jasypt 实现配置文件加密读取操作详解

congge 4099

AI智能体丨使用Coze一键生成中式养生视频,39 条作品涨粉 37.9 万!(附保姆级教程)

本文介绍如何利用扣子(Coze)AI智能体工作流高效制作中式养生短视频。该方案通过AI自动生成养生文案、古风插画素材、语音合成和视频剪辑,将传统制作流程从2-3小时缩短至1-2分钟。工作流包含文案创作、音频生成、图片素材制作和视频合成四大模块,采用大模型处理各环节内容,最终输出可直接导入剪映的草稿文件。特别适合希望快速批量制作文化氛围感强、兼具干货与视觉效果的养生内容创作者,效率提升近百倍。

李同学Lino的博客 3028

网络编程—TCP、UDP编程

网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)当然,我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程。发送端:数据的发送方进程,称为发送端。发送端主机即网络通信中的源主机。接收端:数据的接收方进程,称为接收端。接收端主机即网络通信中的目的主机。

萌新 1311

EUV光源技术路线深度解析

EUV光刻技术的关键瓶颈在于13.5纳米光源的稳定高效获取。主流技术路线从DPP放电等离子体发展为LPP激光等离子体方案,后者通过激光轰击锡液滴实现更高功率输出。新出现的LDP技术综合激光预热与放电优势,虽功率扩展性有限,但为光源技术提供了有益补充。目前LPP仍是唯一通过量产验证的方案,而LDP可能作为过渡技术应用于特定场景。EUV光源的发展实质是能量转化效率与系统可靠性的持续优化过程,各种技术路线的探索共同推动着这一核心工艺的进步。

硬核科技 556

Java:TCP/UDP网络编程

TCP与UDP简单上手

qq_73698057的博客 1708

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JavaSE丨网络编程核心指南:从协议原理到对象传输实战(TCP/UDP)

本文介绍了计算机网络基础概念和通信协议

weixin_73953000的博客 939

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JavaAPI(网络编程)

网络编程的相关知识点 图片引用自王道2024计算机网络考研复习指导

NGC2237999的博客 1258

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

javaAPI_网络编程_网络编程基础1

网络编程基础 1.网络编程概述 (1).计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 (2).网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 2.网络模型概述以及图解 (1).计算机网络之间以何种规则进行通信,就是网络模型...

u013185175的博客 268

javaAPI_网络编程基础_网络编程基础1

网络编程基础 1.网络编程概述 (1).计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件 及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 (2).网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 2.网络模型概述以及图解 ...

ahow81212的博客 115

Java网络编程

Java网络编程是一种使用Java编程语言编写网络应用程序的方法。它使开发人员能够使用Java API来创建、连接和通信网络上的应用程序。Java网络编程涉及创建套接字(socket),建立TCP/IP连接,发送和接收数据,并通过网络传输信息。Java网络编程还可以用于构建客户端/服务器应用程序和分布式应用程序。在Java网络编程中,应用程序可以使用Java Socket类或Java NIO(非阻塞I/O)库来与远程主机进行通信。

qq_29575635的博客 454

java 网络编程

软件结构 常见的软件结构有C/S和B/S Client/Server(C/S结构),表示 客户端/服务器 的软件结构,例如QQ、微信、网盘客户端等,只要是需要我们下载安装,并且和服务器通信的这一类软件,都属于C/S的软件结构。 Browser/Server(B/S结构),表示 浏览器/服务器 的软件结构,例如淘宝网、京东商城等,只要是需要使用浏览器,并且和服务器通信的这一类软件,都属于B/S的软件结构 C/S和B/S各有优势: C/S在图形的表现能力上以及运行的速度上肯定是强于B/S的 C/S/需要运行专门

resistancealex的博客 197

java基础:网络编程(一)简介

网络编程简介 这些知识点在学习计算机网络时都有详细讲,我这就简单介绍下,具体的看计算机网络相关知识。 1、软件结构 常见的软件结构有C/S和B/S C/S (Client/Server) 表示客户端/服务器的软件结构,简单举例:QQ、微信、网盘客户端等,只要是需要我们下载安装,并且和服务器通信的这一类软件,都属于C/S的软件结构。结构如图: B/S (Browser/Server) 表示浏览器/服务器的软件结构,例如淘宝网、京东商城等,只要是需要使用浏览器,并且和服务器通信的这一类软件,都属于B/S的

lalala_dxf的博客 983

29.1 Java进阶之网络IP,DNS,TCP,UDP,客户端服务器通信过程,套接字

IP是一种互联网协议地址,用它我们可以唯一的标识互联网上的计算机。它由四段用点隔开的0~225的十进制数组成,例如:130.254.204.31。

c1776167012的博客 688

网络编程详解:从基础概念到Java实现

本文介绍了网络编程的基础概念与技术要点。主要内容包括:1.计算机网络定义及其软件结构(C/S与B/S对比);2.网络通信三要素(IP地址、端口号、通信协议);3.TCP与UDP协议的对比与应用场景;4.Java中TCP/UDP编程实现方法。重点分析了TCP的三次握手、四次挥手机制,以及Java Socket编程的基本流程,包括服务端监听、客户端连接、数据流传输等核心环节。文章为网络编程初学者提供了系统性的技术框架和实践指导。

m0_73073987的博客 1409

java api 基础编程_javaAPI_网络编程基础_网络编程基础1

网络编程基础1.网络编程概述(1).计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。(2).网络编程就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。2.网络模型概述以及图解(1).计算机网络之间以何种规则进行通信,就是网络模型研究问题.(2).网络...

weixin_29358053的博客 91

Java从接触到放弃(二十一)--网络编程

Day Twenty-One 网络编程 网络编程中有两个主要的问题 如何准确的定位到网络上的一台或者多台主机 找到主机之后如何进行通信 网络编程中的要素 IP和端口号 网络通信协议 udp,tcp IP 如何能获取到IP地址,在Java中有这样的一个类inetAddress,这个类是在java.net.InetAddress这个包下的,这个包下面的都是和网络相关的。在JavaAPI中对这个类有详细的介绍以及如何去使用。这个类有两个子类,Inet4Address和Inet6Address。

huanxin1109的博客 154

java网络编程基础知识

前言 一直以来,认为自己从事的是android开发,后台接口怎么提供是后台的事情,至于用java,go,php等和自己有关系,后来发现错了,做前端开发熟练掌握网络编程知识,对前端程序开发是事半功倍。参考了一些技术博客文档,并仔细查看了javaAPI,把java编程知识总结一下,以备日后学习翻阅。 基础知识 1,OSI分层模型和TCP/IP分层模型的对应关系 网络分层有原来的

王玉见的博客 703
上一篇: SpringMVC概述及小案例
下一篇: Java中线程创建以及线程的生命周期
madi_Goly
博客等级 码龄16年 11粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值