当前位置: 首页 > news >正文

【java基础】Socket网络编程

文章目录

  • 说明
  • InetAddress介绍
  • Socket介绍
  • ServerSocket介绍
  • 实现简单的Socket通信
  • 总结

说明

这里介绍下如何在java里面进行socket编程


InetAddress介绍

这个类表示一个Internet协议(IP)地址,我们可以通过ip或者主机名来构建这个类

    @Testpublic void t1() throws Exception {// 通过ip构建InetAddressInetAddress inetAddress1 = InetAddress.getByAddress(new byte[]{14,119,104,-67});// 通过域名构建InetAddressInetAddress inetAddress2 = InetAddress.getByName("www.baidu.com");// 通过本机地址构建InetAddress localHost = InetAddress.getLocalHost();System.out.println(inetAddress1);System.out.println(inetAddress2);System.out.println(localHost);}

输出的结果如下

/14.119.104.189
www.baidu.com/14.119.104.189
lc-computer/192.168.179.1

可以发现,通过ip构建的不会包含域名,通过域名构建的既包括域名也包括ip

    @Testpublic void t2() throws Exception {InetAddress address = InetAddress.getByName("www.baidu.com");System.out.println(address);// 以文本形式返回IP地址字符串System.out.println(address.getHostAddress());// 获取此IP地址的完全限定域名System.out.println(address.getCanonicalHostName());// 获取主机名System.out.println(address.getHostName());// 获取原始ip地址,是一个byte数组,127以上的数字使用负数表示,num-256System.out.println(Arrays.toString(address.getAddress()));}

上面是这个类的一些常见方法,输出如下

www.baidu.com/14.119.104.189
14.119.104.189
14.119.104.189
www.baidu.com
[14, 119, 104, -67]

Socket介绍

这个类用于创建套接字

在这里插入图片描述

上面列出了Socket的构造器,一般使用传入ip和port这种构造器就足够了。

下面给出了socket的基本使用

    @Testpublic void t1() throws Exception {// 创建一个socketSocket socket = new Socket(InetAddress.getLocalHost(), 9999);// 得到输入输出流InputStream inputStream = socket.getInputStream();OutputStream outputStream = socket.getOutputStream();// 一系列操作//最后关闭流以及socketinputStream.close();outputStream.close();socket.close();}

ServerSocket介绍

这个类用于创建服务器套接字的,一旦启动这个服务,那么它就会一直监听是否有客户端进行连接。

创建ServerSocket非常简单,只需要在创建的时候传入要监听的端口即可

        // 指定要创建的端口ServerSocket serverSocket=  new ServerSocket(8888);

我们使用accept这个方法监听是否有客户端进行连接,一旦有客户端进行连接,那么就会创建一个新的Socket与客户端进行交互。

        // 监听到这个套接字的连接并接受它。该方法阻塞,直到建立连接。Socket accept = serverSocket.accept();

对于accept,一般都是放在一个死循环里面的,监听到有客户端连接,那么就创建一个新的线程,将Socket传递到新的线程,让这个线程与客户端进行交互,自己则继续监听。

        while (true){Socket socket = serverSocket.accept();// 创建一个新线程与客户端进行交互new Thread(new Xxx(socket)).start();}

实现简单的Socket通信

现在创建一个ServerSocket在9999端口进行监听,只要有客户端连接,那么就向客户端发送字符串,然后直接关闭服务端。

    public static void main(String[] args) throws Exception{ServerSocket serverSocket = new ServerSocket(9999);System.out.println("在9999端口进行监听");Socket socket = serverSocket.accept();System.out.println("有客户端连接,开始返回数据");PrintWriter printWriter = new PrintWriter(socket.getOutputStream());printWriter.write("hello world\n");printWriter.write("exit\n");System.out.println("数据返回完成,关闭所有的流");printWriter.close();socket.close();serverSocket.close();}

现在创建一个客户端,去连接9999端口,然后输出返回的字符串,如果是字符串是exit,那么就关闭Socket。

    public static void main(String[] args) throws Exception {Socket socket = new Socket(InetAddress.getLocalHost(), 9999);System.out.println("与服务器连接建立成功");Scanner in = new Scanner(socket.getInputStream());String s = "";System.out.println("开始返回数据");while (!Objects.equals(s = in.nextLine(), "exit")) {System.out.println(s);}System.out.println("数据返回结束,关闭所有的流");in.close();socket.close();}

运行服务端,然后运行客户端,控制台输出如下

在这里插入图片描述

总结

这里介绍了java种Socket的基本使用,对于Socket细节还有很多(其实都是调api),具体的细节还是得要去学习计算机网络。

相关文章:

【java基础】Socket网络编程

文章目录说明InetAddress介绍Socket介绍ServerSocket介绍实现简单的Socket通信总结说明 这里介绍下如何在java里面进行socket编程 InetAddress介绍 这个类表示一个Internet协议(IP)地址,我们可以通过ip或者主机名来构建这个类 Testpublic void t1() throws Except…...

转发和重定向区别

转发和重定向 1.0 面试提问 定义不同跳转的方式不同数据共享不同最终的URL地址不同代码实现不同 1. 转发 1.1 概念 转发实际上在服务器端进行页面的跳转操作,请求转发:一种在服务器内部的资源的跳转的方式。 访问A,A请求转发了B&#xff0c…...

java面试题(持续更新)

java面试题(持续更新) java 基础 java面向对象有哪些特征 面向对象的三大特征:封装、继承、多态 封装:隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据,…...

【花雕学AI】09:发挥ChatGPT最大潜力——产生高质量内容的九种方法和建议

人工智能(AI)是当今科技领域最热门和最有前景的话题之一,它已经渗透到了我们生活和工作的方方面面,给我们带来了许多便利和惊喜。而在AI的众多分支中,自然语言处理(NLP)是最贴近人类的一个领域&…...

实战打靶集锦-013-Loly

**写在前面:**记录博主的一次打靶经历 目录1. 主机发现2. 端口扫描3. 服务枚举4. web服务探查4.1 WordPress探测4.2 使用metasploit4.3 使用wpscan4.4 阶段性回顾5. 提权5.1 弱密码提权5.2 操作系统信息枚举5.3 定时任务枚举5.4 passwd信息枚举5.5 可执行文件枚举5.…...

程序员OKR学习法

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl OKR管理法 OKR(Objectives and Key Results)管理法是一种目标管理方法,旨在通过制定明确的目标和可量化的关键结果来帮助组织、团队和个人…...

【从零开始学习 UVM】6.6、UVM 激励产生 —— UVM Virtual Sequence【重要】

文章目录 使用virtual sequencer不使用virtual sequencervirtual sequence是一个容器,用于在环境中的virtual sequencer上启动多个sequence。 这个virtual sequence通常由一个具有对真实sequencers句柄的virtual sequencers执行。 需要virtual sequence的原因是当您需要在不…...

蓝桥杯:阶乘约数

蓝桥杯:阶乘约数https://www.lanqiao.cn/problems/1020/learning/ 目录 题目描述 填空题:答案是 39001250856960000 题目分析 AC代码(Java) 暴力 线性筛 题目描述 填空题 定义阶乘 n!123⋅⋅⋅n。 请问 100! (100 的阶乘)有…...

最大数字

[蓝桥杯 2022 国 B] 最大数字 题目描述 给定一个正整数 NNN。你可以对 NNN 的任意一位数字执行任意次以下 2 种操作: 将该位数字加 111。如果该位数字已经是 999,加 111 之后变成 000。 将该位数字减 111。如果该位数字已经是 000,减 111 之后变成 99…...

【java进阶08:异常】finally关键字、自定义异常类、用户业务作业、军队武器作业

java中的异常处理机制 异常在java中以类和对象的形式存在,那么异常的继承结构是怎样的?我们可以使用UML图来描述以下继承结构 画UML图的工具:Rational Rose、starUML等 Object下有Throwable(可抛出的) Throwable下有两…...

#课程笔记# 电路与电子技术基础 课堂笔记 第6章 半导体器件的基本特性

6.1 半导体基础知识 6.1.1 本征半导体 完全纯净的、结构完整的半导体称为本征半导体。 常用的半导体材料有硅和锗,它们都是四价元素,原子最外层轨道有四个价电子。 若将纯净的半导体制成晶体,则原子形成排列整齐的点阵。 点阵是由共价键提供…...

skimage.filters.apply_hysteresis_threshold详解

本文内容均参考scipy1.9.1scipy1.9.1scipy1.9.1版本的源码,若有任何不当欢迎指出 我们截取官方注释如下: def apply_hysteresis_threshold(image, low, high):"""Apply hysteresis thresholding to image.This algorithm finds regions …...

一、基础算法5:前缀和与差分 模板题+算法模板(前缀和,子矩阵的和,差分,差分矩阵)

文章目录算法模板前缀和模板子矩阵的和模板差分模板差分矩阵模板模板题前缀和原题链接题目题解子矩阵的和原题链接题目题解差分原题链接题目题解差分矩阵原题链接题目题解算法模板 前缀和模板 S[i] a[1] a[2] ... a[i] a[l] ... a[r] S[r] - S[l - 1]子矩阵的和模板 S[i…...

Python矩阵分解之QR分解

文章目录QR和RQ分解其他函数QR和RQ分解 记AAA为方阵,P,QP, QP,Q分别为正交单位阵和上三角阵,则形如AQRAQRAQR的分解为QR分解;形如ARQARQARQ的分解为RQ分解。 在scipy.linalg中,为二者提供了相同的参数,除了待分解矩阵…...

随机森林程序

n_estimators:数值型取值 含义:森林中决策树的个数,默认是10 criterion:字符型取值 含义:采用何种方法度量分裂质量,信息熵或者基尼指数,默认是基尼指数 max_features:取值为int型, float型, string类型…...

每日一练2627——变态跳台阶快到碗里来不用加减乘除做加法三角形

文章目录变态跳台阶思路:代码:快到碗里来思路:代码:不用加减乘除做加法思路:代码:三角形思路:代码:变态跳台阶 题目链接: 思路: 这个题目很容易理解&#…...

LeetCode-146. LRU 缓存

目录LRU理论题目思路代码实现一代码实现二题目来源 146. LRU 缓存 LRU理论 LRU 是 Least Recently Used 的缩写,这种算法认为最近使用的数据是热门数据,下一次很大概率将会再次被使用。而最近很少被使用的数据,很大概率下一次不再用到。当缓…...

#课程笔记# 电路与电子技术基础 课堂笔记 第3章 电路分析的几个定理

3.1 叠加定理 激励:电流源或电压源 响应:电流或电压 叠加定理一般用于已知激励或响应中的一种,求另一种。做法就是,每次只求一个激励作用下的响应,将其他激励置零,置零的具体做法是,电压源变…...

推迟参数设计的自适应反步控制和自适应神经网络的反步控制设计

推迟参数设计的自适应反步控制和自适应神经网络的反步控制设计 目录推迟参数设计的自适应反步控制和自适应神经网络的反步控制设计前言匹配与非匹配1. 基于自适应反步控制的非匹配条件下的系统控制器设计问题描述控制器设计小结2. 基于自适应反步控制和推迟参数设计的非匹配条件…...

spring5.1+SmartInstantiationAwareBeanPostProcessor 解决循环依赖

SmartInstantiationAwareBeanPostProcessor 解决循环依赖的过程, 例如上面的 A依赖B, B依赖A SmartInstantiationAwareBeanPostProcessor 是 Spring 中的一个接口,它扩展了 InstantiationAwareBeanPostProcessor 接口并提供了对 Bean 的实例化和属性填充的更高级的…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

【Oracle】分区表

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

小木的算法日记-多叉树的递归/层序遍历

🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...

使用 uv 工具快速部署并管理 vLLM 推理环境

uv:现代 Python 项目管理的高效助手 uv:Rust 驱动的 Python 包管理新时代 在部署大语言模型(LLM)推理服务时,vLLM 是一个备受关注的方案,具备高吞吐、低延迟和对 OpenAI API 的良好兼容性。为了提高部署效…...

Python爬虫(四):PyQuery 框架

PyQuery 框架详解与对比 BeautifulSoup 第一部分:PyQuery 框架介绍 1. PyQuery 是什么? PyQuery 是一个 Python 的 HTML/XML 解析库,它采用了 jQuery 的语法风格,让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...