文章目录 一、什么是网络编程? 二、Socket套接字 流套接字 数据报套接字 原始套接字 三、Java数据报套接字通讯模型 1. Socket UDP模型 2. 常见的API DatagramSocket API DatagramPacket API InetSocketAddress API 四、UDP数据报套接字编程 1. 回显服务器 2.查字典服务器 一、什么是网络编程? 网络编程:指网络上的主机,通过不同的进程,以编程的方式实现网络通信(数据通信本质是网络数据传输),其目的就是为了获取网络资源。 如何来理解呢?我们只需要记住是不同进程就可以。即便是同一台主机,只要是不同进程之间进行传输数据就属于网络编程。但是需要注意的是,一个进程获取资源,另外一个进程提供资源。 发送端和接收端(发送端和接收端只是相对的,只是一次网络数据传输产生数据流之后的概念) 发送端:源主机 接收端:目的主机 收发端:既可以进行发送也可以接收数据 请求和响应 一般来讲,获取一个网络资源,涉及到两次网络数据传输:①请求数据发送 ②响应数据发送 比如,主机A给主机B发送消息之前,会请求主机B与它建立连接,之后主机B返回给它响应(同意建立连接)。 客户端和服务端 服务端:提供服务的一方 客户端:获取服务资源,并且可以保存资源在服务端。 举个栗子:在银行办业务 银行提供存款服务:用户(客户端)保存资源(现金)在银行(服务端) 银行提供取款服务:用户(客户端)获取服务端资源(银行替用户保管的现金) 常见的客户端服务端模型 核心流程: ①Client发送请求到Server ②Server根据请求,执行响应的业务处理 ③Server返回响应,发送业务处理结果到Client ④Client根据响应数据,展示处理结果(展示获取到的资源/保存资源) 二、Socket套接字 Socket套接字:用于网络通信的技术,一般我们使用Socket进行网络程序开发,即网络编程。 其主要针对传输层协议划分为三类:流套接字、数据报套接字、原始套接字。 流套接字 使用传输层TCP协议; TCP:即Transmission Control Protocol(传输控制协议),传输层协议。 以下为TCP的特点: 有连接(eg. 打电话要先拨号建立连接) 可靠传输(发送方能知道对方是否收到) 面向字节流(数据传输是基于IO流,在IO流没有关闭的情况下是无边界的数据,可以进行多次发送,也可以分开多次接收),以字节为基本单位,文件读写也是面向字节流的。 有接收缓冲区,也有发送缓冲区 大小不受限制 全双工(A、B同时发送,即一个socket既能读也能写) 数据报套接字 使用传输层UDP协议; UDP:即User Datagram Protocol(用户数据报协议),传输层协议。 以下为UDP的特点: 无连接 (eg. 发微信,发送数据之前不需要建立连接) 不可靠传输(UDP尽最大努力交付,即不保证可靠交付) 面向数据报(对于数据报来说,传输数据是一块一块的,发送一块数据假如100个字节,必须一次发送,接收也必须一次接收100个字节,而不能分100次,每次接收1个字节。) 有接收缓冲区,无发送缓冲区 大小受限:一次最多传输64k 全双工 原始套接字 原始套接字用于自定义传输层协议,用于读写内核没有处理的IP协议数据。(这不是我们的重点) 面试题:TCP协议和UDP协议的区别 参考:TCP和UDP的区别 ①报头不同 ②协议不同 ③特点不同 三、Java数据报套接字通讯模型 1. Socket UDP模型 操作系统把网络编程的一些相关操作(访问网络核心的硬件设备/网卡驱动等)封装起来了,提供了一组API供开发者使用。 对于UDP协议来讲,具有无连接、面向数据报的特征,即每次都是没有建立连接,一次发送全部数据报一次接受全部数据报。java中使用UDP协议通讯,主要基于DatagramSocket类来创建数据报套接字,并使用DatagramPacket描述一个发送或接收数据报。(DatagramSocket类描述一个socket对象,本质是一个文件描述符,表示网卡设备的文件,通过读写socket文件的方式操作网卡) […]
View Details在Java中使用UDP编程,仍然需要使用Socket,因为应用程序在使用UDP时必须指定网络接口(IP地址)和端口号。注意:UDP端口和TCP端口虽然都使用0~65535,但他们是两套独立的端口,即一个应用程序用TCP占用了端口1234,不影响另一个应用程序用UDP占用端口1234
View DetailsNacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
View DetailsVO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。
DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。
PO(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。
这篇文章将讨论使用纯 Java、Guava 和 Apache Commons 进行 Base64 编码和解码。 Base64 是一组类似的二进制到文本的编码方案,通过将其转换为 ASCII 字符串格式来表示二进制数据 radix-64 表示。每个 Base64 digit 正好代表 6 位数据,也就是说 3 个字节可以用 4 个 6 位来表示 Base64 位数。
View Details你如果接触过最简单的webservice程序,你就会会知道,模拟一个客户端去调用服务端的服务,需要知道的参数有:
wsdl文件路径
提供webservice服务的服务接口源文件(.java)
服务接口实现类中@WebService注解上targetNamespace属性的值(wsdl文件中可以得知)
服务接口实现类中@WebService注解上serviceName属性的值(wsdl文件中可以得知)
因此,获取起来相对麻烦。
而JDK1.6自带了wsimport.exe工具,就是专门为了方便客户端获取服务端文件以及调用webservice服务的。
该工具位于JDK安装目录的lib目录下。
使用方法:
进入命令提示符界面
切换到JDK安装路径的lib目录下
输入wsimport, 回车,就可以看到该工具的参数,根据需要选择,通常是 -keep 表示保存文件 -s 保留源文件
格式:wsimport -keep -s 保留源文件的路径 wsdl文件路径
View Details设置上游分支: 方式一(适用远程分支已存在): 用参数 -u 或 --set-upstream-to 设置上游 $ git branch --set-upstream-to=origin/<远程分支> <本地分支> 方式二(适用远程分支不存在): 上传本地分支到远程,同是把上传后的远程分支设置为本地分支的上游分支: git push set-upstream origin HEAD:<远程分支> 取消分支上游: $ git branch --unset-upstream 查看上游: 可以通过git status 、 git checkout <分支>、git branch -vv命令查看 如下图框中就是当前分支的上游。 from:https://blog.csdn.net/xjj1314/article/details/111269837
View Details错误信息 : Spring Boot:The field file exceeds its maximum permitted size of 1048576 bytes. 解决方法一:在启动类添加如下代码: @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); //单个文件最大 factory.setMaxFileSize("10240KB"); //KB,MB // 设置总上传数据总大小 factory.setMaxRequestSize("102400KB"); return factory.createMultipartConfig(); } 解决方法二:根据spring boot 版本不同在application文件添加不同的配置 Spring Boot 1.3 或之前的版本,配置: multipart.maxFileSize = 100Mb multipart.maxRequestSize=150Mb Spring Boot 1.4 版本后配置更改为: spring.http.multipart.maxFileSize = 100Mb spring.http.multipart.maxRequestSize = 150Mb Spring Boot 2.0 之后的版本配置修改为: 单位Mb改为MB了 spring.servlet.multipart.max-file-size = 100MB spring.servlet.multipart.max-request-size = 150MB ************************************************************************************************** multipart.maxFileSize=10Mb是设置单个文件的大小, multipart.maxRequestSize=100Mb是设置单次请求的文件的总大小 如果是想要不限制文件上传的大小,那么就把两个值都设置为-1 ************************************************************************************************** *********注意:由于版本更新迭代快,如果以上的配置有误,请以Spring Boot的官方文档为准。********* Spring Boot 各版本文档地址(比较齐全) https://docs.spring.io/spring-boot/docs/ 进入reference/html/目录就是了哈 ************************************************************************************************** from:https://www.cnblogs.com/liujf-a-mad-man/p/10775470.html
View Details在使用springboot上传文件时后报错如下
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
ERROR 11136 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field photos exceeds its maximum permitted size of 1048576 bytes.] with root cause org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field photos exceeds its maximum permitted size of 1048576 bytes. at org.apache.tomcat.util.http.fileupload.impl.FileItemStreamImpl$1.raiseError(FileItemStreamImpl.java:114) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.checkLimit(LimitedInputStream.java:76) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:135) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at java.io.FilterInputStream.read(FilterInputStream.java:107) ~[na:1.8.0_221] at org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:98) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:291) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.connector.Request.parseParts(Request.java:2922) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.connector.Request.getParts(Request.java:2824) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:1098) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:95) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.<init>(StandardMultipartHttpServletRequest.java:88) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:122) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1202) ~[spring-webmvc-5.3.9.jar:5.3.9] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1036) ~[spring-webmvc-5.3.9.jar:5.3.9] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.9.jar:5.3.9] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.9.jar:5.3.9] at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[tomcat-embed-core-9.0.52.jar:4.0.FR] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.9.jar:5.3.9] at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.52.jar:4.0.FR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.52.jar:9.0.52] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.9.jar:5.3.9] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.9.jar:5.3.9] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.9.jar:5.3.9] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.9.jar:5.3.9] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) [tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.52.jar:9.0.52] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.52.jar:9.0.52] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_221] |
报错原因: 单个文件上传大小不能多于1MB 多个文件上传大小不能多于10MB springboot底层的源码简单解析
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
// 这两个类我都截取了部分,感兴趣的朋友可以自己去看 // 文件上传的配置类 public class MultipartProperties { private boolean enabled = true; private String location; // 默认单个文件大小为1MB private DataSize maxFileSize = DataSize.ofMegabytes(1L); // 默认多个文件大小为10MB private DataSize maxRequestSize = DataSize.ofMegabytes(10L); private DataSize fileSizeThreshold = DataSize.ofBytes(0L); private boolean resolveLazily = false; } // 设置文件大小 public final class DataSize implements Comparable<DataSize>, Serializable { /** * The pattern for parsing. */ private static final Pattern PATTERN = Pattern.compile("^([+\\-]?\\d+)([a-zA-Z]{0,2})$"); /** * Bytes per Kilobyte. */ private static final long BYTES_PER_KB = 1024; /** * Bytes per Megabyte. */ private static final long BYTES_PER_MB = BYTES_PER_KB * 1024; /** * Bytes per Gigabyte. */ private static final long BYTES_PER_GB = BYTES_PER_MB * 1024; /** * Bytes per Terabyte. */ private static final long BYTES_PER_TB = BYTES_PER_GB * 1024; private final long bytes; /** * Obtain a {@link DataSize} representing the specified number of megabytes. * @param megabytes the number of megabytes, positive or negative * @return a {@link DataSize} */ public static DataSize ofMegabytes(long megabytes) { return new DataSize(Math.multiplyExact(megabytes, BYTES_PER_MB)); } } |
解决办法:在properties或者yaml配置文件里自定义配置即可修改springboot文件上传最大限制,这里我在yaml里配置
|
1 2 3 4 5 6 |
spring: mvc: servlet: multipart: max-file-size: 10MB # 设置单个文件最大大小为10MB max-request-size: 100MB # 设置多个文件大小为100MB |
from:https://blog.csdn.net/happy488127311/article/details/120588972
View Details