【Java学习之道】Java网络编程API介绍
引言
在Java中,进行网络编程的主要方式是通过Java网络编程API。这些API提供了一组类和接口,用于创建网络应用,如TCP和UDP通信、URL访问等。在这一节中,我们将带你领略Java网络编程API的魅力。
一、InetAddress
InetAddress
类是表示互联网协议(IP)地址的类。IP地址是网络中设备的一种标识,它由一组数字组成,如192.168.0.1。InetAddress
类提供了一些方法来处理IP地址,例如获取主机名、将主机名解析为IP地址等。
例如:
InetAddress address = InetAddress.getByName("192.168.0.1");
System.out.println(address.getHostName()); // 输出:192.168.0.1
二、Socket和ServerSocket
Socket
类和ServerSocket
类是Java网络编程中的重要类,它们用于在两台计算机之间建立连接,实现数据传输。
2.1 Socket
Socket
类代表一个客户端套接字,它通过网络向远程服务器发送请求,并接收服务器的响应。创建Socket
对象时,需要指定远程主机的IP地址和端口号。
例如:
Socket socket = new Socket("localhost", 8080); // 连接到本地主机的8080端口
2.2 ServerSocket
ServerSocket
类代表一个服务器套接字,它监听某个端口,等待客户端连接,然后接收来自客户端的请求并发送响应。
例如:
ServerSocket serverSocket = new ServerSocket(8080); // 监听本地主机的8080端口
三、InputStream和OutputStream
InputStream
和OutputStream
是Java中用于输入和输出的两个抽象类,它们提供了各种子类,用于处理各种数据流。在Java网络编程中,我们通常使用这两个类来读取和写入数据。
例如,在Socket通信中,可以使用InputStream
和OutputStream
分别从服务器和客户端读取和写入数据:
Socket socket = new Socket("localhost", 8080); // 连接到服务器
InputStream in = socket.getInputStream(); // 从服务器读取数据
OutputStream out = socket.getOutputStream(); // 向服务器写入数据
四、DataInputStream和DataOutputStream
DataInputStream
和DataOutputStream
是InputStream
和OutputStream
的子类,它们提供了读写基本数据类型的方法,如int、char、double等。在Java网络编程中,这两个类非常有用。
例如:
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
int number = in.readInt(); // 从服务器读取一个整数
out.writeDouble(3.14); // 向服务器写入一个双精度浮点数
五、URL和URLConnection
Java还提供了java.net.URL
和java.net.URLConnection
类来处理URL资源的访问。通过这两个类,我们可以方便地实现HTTP请求和响应的处理。以下是一个简单的URLConnection编程示例:
import java.io.*;
import java.net.*;public class URLConnectionExample {public static void main(String[] args) throws IOException {// 创建一个URL对象,指向目标网址URL url = new URL("http://www.example.com");System.out.println("目标网址:" + url);// 打开URLConnection连接URLConnection connection = url.openConnection();System.out.println("连接已建立");// 获取输入流,读取网页内容BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null) {System.out.println(line);}in.close();}
}
六、Socket编程示例
Socket是网络编程的基础,它是两台计算机之间进行通信的端点。在Java中,我们可以通过java.net.Socket
类来创建和管理Socket连接。以下是一个简单的Socket编程示例:
import java.io.*;
import java.net.*;public class SocketExample {public static void main(String[] args) throws IOException {// 创建一个ServerSocket,监听8080端口ServerSocket serverSocket = new ServerSocket(8080);System.out.println("服务器已启动,等待客户端连接...");// 等待客户端连接Socket socket = serverSocket.accept();System.out.println("客户端已连接:" + socket.getInetAddress());// 获取输入流,读取客户端发送的数据BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));String message = in.readLine();System.out.println("收到客户端消息:" + message);// 获取输出流,向客户端发送数据PrintWriter out = new PrintWriter(socket.getOutputStream(), true);out.println("你好,客户端!");// 关闭资源in.close();out.close();socket.close();serverSocket.close();}
}
结语
以上就是Java网络编程API的一些常用类和接口。通过这些API,你可以轻松地实现网络通信、数据传输等功能。准备好进入网络编程的世界了吗?让我们一起开始吧!
文 | chwt9299
print("Hello, world.")
亲爱的读者,我是本篇文章的作者chwt9299。感谢您抽出宝贵的时间阅读我的作品。如果对我的作品产生了共鸣,或者觉得我的观点独到有趣,请用点赞、关注、评论、收藏来表达您的喜爱吧!n_n
相关文章:
【Java学习之道】Java网络编程API介绍
引言 在Java中,进行网络编程的主要方式是通过Java网络编程API。这些API提供了一组类和接口,用于创建网络应用,如TCP和UDP通信、URL访问等。在这一节中,我们将带你领略Java网络编程API的魅力。 一、InetAddress InetAddress类是表…...
[论文笔记]SimCSE
引言 今天带来一篇当时引起轰动的论文SimCSE笔记,论文题目是 语句嵌入的简单对比学习。 SimCSE是一个简单的对比学习框架,它可以通过无监督和有监督的方式来训练。 对于无监督方式,输入一个句子然后在一个对比目标中预测它自己,仅需要标准的Dropout作为噪声。这种简单的…...
设置按键中断,按键1按下,LED亮,再按一次,灭按键2按下,蜂鸣器响。再按一次,不响按键3按下,风扇转,再按一次,风扇停
src/key_it.c #include"key_it.h" //GPIO初始化 void all_led_init() {//RCC使能RCC->MP_AHB4ENSETR | (0X1<<4);//设置PE10 PF10 PE8为输出GPIOE->MODER & (~(0X3<<20));GPIOE->MODER | (0X1<<20);//设置推挽输出GPIOE->OTYPER…...
深拷贝和浅拷贝的主要区别
在JavaScript中,深拷贝和浅拷贝的主要区别在于它们处理对象属性的方式。 浅拷贝(Shallow Copy)只复制对象的引用,而不是实际的对象。因此,如果你修改了复制的对象,原始对象也会受到影响。 深拷贝…...
Git Cherry Pick的使用
cherry-pick命令的基本用法 cherry-pick命令的基本语法如下: git cherry-pick <commit>其中,<commit>是要应用的提交的哈希值或分支名。该命令会将指定的提交应用到当前分支上,并创建一个新的提交。 使用场景 cherry-pick命令…...
vue3后台管理框架之基础配置
配置vite.config.js import { defineConfig } from viteimport vue from vitejs/plugin-vueexport default defineConfig(({ command, mode }) > {//const env loadEnv(mode, process.cwd(), ) //获取环境变量return {// 打包devbase: ./,// 开发环境server: {port: 5002,…...
Easysearch压缩模式深度比较:ZSTD+source_reuse的优势分析
引言 在使用 Easysearch 时,如何在存储和查询性能之间找到平衡是一个常见的挑战。Easysearch 具备多种压缩模式,各有千秋。本文将重点探讨一种特别的压缩模式:zstd source_reuse,我们最近重新优化了 source_reuse,使得它在吞吐量…...
扩散模型的系统性学习(一):DDPM的学习
文章目录 一、学习的资料1.1 对于扩散模型的发展过程的综述1.2对论文中涉及的公式以及公式对应的代码的解读1.3github中对于各模型实现的代码1.4相关基础知识的学习 二、DDPM的学习2.1 DDPM总体知识的梳理2.2相关代码的解读2.2.1unet 代码块2.2.2高斯扩散代码块2.2.3 实验流程代…...
注意力屏蔽(Attention Masking)在Transformer中的作用 【gpt学习记录】
填充遮挡(Padding Masking): 未来遮挡(Future Masking):...
MyBatisPlus详解
前言: 📕作者简介:热爱编程的小七,致力于C、Java、Python等多编程语言,热爱编程和长板的运动少年! 📘相关专栏Java基础语法,JavaEE初阶,数据库,数据结构和算法系列等,大家有兴趣的可以看一看。 😇😇😇有兴趣的话关注博主一起学习,一起进步吧! 一、MyBatis…...
组合数的计算
C: 即从a个元素中选取b个元素的组合数。 LL C(int a, int b) {LL res 1;for (int i a, j 1; j < b; i --, j )res res * i / j;return res; } A: 表示从a个元素中选取b个元素进行排列的情况数。 LL P(int a, int b) {LL res 1;for (int i a; i > a - b; i--){res…...
linux之shell记录
shell属于一种很容易学习的程序设计语言,依赖于功能强大的命令可以编写提高开发效率的脚本。这里记录一下常用的shell相关的知识点。 持续更新中。。。 1、在linux或mac中查看使用的shell echo $SHELL /bin/bashshell是一种脚本语言,就会有解释器来执行…...
外卖大数据案例
一、环境要求 HadoopHiveSparkHBase 开发环境。 二、数据描述 meituan_waimai_meishi.csv 是某外卖平台的部分外卖 SPU(Standard Product Unit , 标准产品单元)数据,包含了外卖平台某地区一时间的外卖信息。具体字段说明如下&am…...
到底什么是5G-R?
近日,工信部向中国国家铁路集团有限公司(以下简称“国铁集团”)批复5G-R试验频率的消息,引起了行业内的广泛关注。 究竟什么是5G-R?为什么工信部会在此时批复5G-R的试验频率? 今天,小枣君就通过…...
uniapp 使用和引入 thorui
1. npm install thorui-uni 2. "easycom": { "autoscan": true, "custom": { "tui-(.*)": "thorui-uni/lib/thorui/tui-$1/tui-$1.vue" } }, 3....
vue3中ref和reactive的区别
原文地址 深入聊一聊vue3中的reactive()_vue3 reactive_忧郁的蛋~的博客-CSDN博客 ref和reactive的区别-CSDN博客 理解: 1.ref是定义简单类型 和单一的对象 2.reactive 定义复杂的类型 梳理文档: ref和reactive都是Vue.js 3.x版本中新增的响应式API&…...
文件路径操作
避开-转义字符 python文件路径导致的错误常常与“\”有关,因为在路径中的“\”常会被误认为转义字符。 所以在上述路径中,\table\name\rain中的\t,\n,\r都易被识别为转义字符。 解决的办法主要由以下三种: #1 前面加r表示不转义 pathr&quo…...
Java Cache 缓存方案详解及代码-Ehcache
一、Spring缓存概念 Spring从3.1开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术; 并支持使用 JCache(JSR-107) 注解简化我们开发。 常用的缓存实现有 RedisCache 、EhCach…...
JAVA设计模式-装饰者模式
一.概念 装饰器模式(Decorator Pattern),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更灵活。 —-《大话设计模式》 允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属…...
STM32F1简介
前言 本次学习使用的是STM32F1系列的芯片,72MHz的Cortex-M3内核; 名词解释 STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器(MCU); ARM Cortex-M内核是ARM公司设计的,程序指令的执行,…...
SpringBoot面试题6:Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring Boot 2.X 有什么新特性?与 1.X 有什么区别? Spring Boot是一种用于简化Spring应用程序开发的框架,它提供了自动配置、起步依赖和快速开…...
qt笔记之qml下拉标签组合框增加发送按钮发送标签内容
qt笔记之qml下拉标签组合框增加发送按钮发送标签内容 code review! 文章目录 qt笔记之qml下拉标签组合框增加发送按钮发送标签内容1.运行2.文件结构3.main.qml4.main.cc5.MyClass.h6.MyClass.cc7.CMakeLists.txt8.ComboBox.pro9.qml.qrc 1.运行 2.文件结构 3.main.qml 代码 …...
linux上构建任意版本的rocketmq多架构x86 arm镜像——筑梦之路
现状 目前市面上和官方均只有rocketmq x86架构下的docker镜像,而随着国产化和信创适配的需求越来越多,显然现有的x86架构下的docker镜像不能满足多样化的需求,因此我们需要根据官方发布的版本制作满足需求的多架构镜像,以在不同cp…...
Java8 新特性之Stream(五)-- Stream的3种创建方法
目录 1. 集合 创建Stream流 拓展: 2. 数组 创建Stream流 3. 静态方法 创建Stream流 1. 集合 创建Stream流 @...
Vue实现模糊查询搜索功能
第一步 先创建一个val变量 // 用户搜索内容 let val ref(""); 第二步:给input绑定v-model (为了获取input框的值) <input v-model"val" type"text" placeholder"请输入行业/公司/名称"/> 第…...
(C++ STL) 详解vector模拟实现
目录 一.vector的介绍 1.vector的介绍 二.vector的定义模拟实现 三.vector各接口的模拟实现 1.vector迭代器的模拟实现 2.构造函数 2.1无参构造 2.2 n个val构造 2.3迭代器区间构造 2.4通过对象初始化(拷贝构造) 3.析构函数 4.size 5.operato…...
c语言从入门到实战——C语言数据类型和变量
C语言数据类型和变量 前言1. 数据类型介绍1.1 字符型1.2 整型1.3 浮点型1.4 布尔类型1.5 各种数据类型的长度1.5.1 sizeof操作符1.5.2 数据类型长度1.5.3 sizeof中表达式不计算 2. signed 和 unsigned3. 数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5. 算术操作符&…...
[论文精读]Semi-Supervised Classification with Graph Convolutional Networks
论文原文:[1609.02907] Semi-Supervised Classification with Graph Convolutional Networks (arxiv.org) 论文代码:GitHub - tkipf/gcn: Implementation of Graph Convolutional Networks in TensorFlow 英文是纯手打的!论文原文的summari…...
CICD:使用docker+ jenkins + gitlab搭建cicd服务
持续集成解决什么问题 提高软件质量效率迭代便捷部署快速交付、便于管理 持续集成(CI) 集成,就是一些孤立的事物或元素通过某种方式集中在一起,产生联系,从而构建一个有机整体的过程。 持续,就是指长期…...
新能源电池试验中准确模拟高空环境大气压力的解决方案
摘要:针对目前新能源电池热失控和特性研究以及生产中缺乏变环境压力准确模拟装置、错误控制方法造成环境压力控制极不稳定以及氢燃料电池中氢气所带来的易燃易爆问题,本文提出了相应的解决方案。方案的关键一是采用了低漏率电控针阀作为下游控制调节阀实…...
嘉兴seo报价/南京seo收费
现在用wordpress的人越来越多,从个人到企业的博客。这Wordpress众多Wordpress资源有一定的关系。你可以通过选择一个适合自己的模板然后快速的建立自己的网站或者博客,甚者不需要任何专业的技术,就可以建立一个漂亮的站点。但是面对众多的模板…...
做任务领游戏的网站/正规seo多少钱
C:\Users\Administrator 找到.gitconfig 删掉这个...
交互网站建设需要做什么/在线客服系统平台有哪些
一、在spring的应用中我们存在两种过滤的用法,一种是拦截器、另外一种当然是过滤器。我们这里介绍过滤器在springboot的用法,在springmvc中的用法基本上一样,只是配置上面有点区别。 二、filter功能,它使用户可以改变一个 request…...
南京建设教育网站/淘宝关键词排名查询网站
还记得WordPress诞生的第一天,该系统有多简单? 特别是周围没有很多基于jQuery的WordPess插件。 但是, 这些天来, WordPress开发人员为我们带来了很多jQuery插件,从而改善了这个出色的CMS! 因此,…...
湖南省建设银行网站/信息流广告加盟代理
公众号关注 「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !云原生技术里有很多技术、概念和术语,不了解的人,往往弄不清楚而一头雾水,这些概念都是啥,之间是什么关系?本文要说的就是这…...
最容易做的门户网站/新网络营销
随着互联网的普及,即时通讯软件也渗透到了人们的日常生活和工作当中,而市面上的即时通讯软件现在有分为两种,一种是个人社交沟通软件,另外一种则是企业即时通讯。企业即时通讯软件是为了让企业内部方便沟通、管理及办公࿰…...