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

Java网络编程:概述--快速入门

I. 介绍

   1.1 什么是网络编程


      - 网络编程是指通过计算机网络实现程序之间的通信。在Java中,网络编程通常涉及到数据的传输、通信协议的使用以及与网络相关的各种操作。

  1.2. 为什么学习Java网络编程


      - Java网络编程是Java开发者重要的技能之一,因为它允许应用程序通过网络进行数据交换,实现分布式系统和网络通信。学习网络编程可以帮助开发者构建强大的、具有高度互联性的应用。

  1.3. Java在网络编程中的角色


      - Java在网络编程中扮演着多个角色,包括作为服务器和客户端,使用Socket实现基本的通信,以及通过高级抽象层如HTTPURLConnection处理Web请求。Java还提供了NIO和WebSocket等技术,使网络编程更加灵活和高效。网络安全与加密也是Java网络编程中的重要方面,以确保数据的安全传输。

2. 基础知识

  2.1 OSI模型概述


      - OSI模型将计算机网络通信分为七个层次,每个层次负责特定的功能。物理层处理硬件传输和物理连接,数据链路层处理数据帧的传输,网络层负责路由和包转发,传输层提供端到端的可靠传输,会话层管理会话和对话,表示层处理数据的格式和编码,应用层提供用户接口和网络服务。

  2.2. TCP/IP协议


      - TCP/IP协议是一组用于互联网通信的协议。其中,TCP协议提供可靠的、面向连接的数据传输,而IP协议负责数据包的路由和定位。这组协议是互联网通信的基础,允许不同计算机在全球范围内进行数据交换。

TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不同的通信功能。

应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。
传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。
网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。
数据链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动

     2.2.1 传输控制协议TCP(Transmission Control Protocol) 

        ①安全可靠的传输协议;

        ②每次传输数据时,先与服务器通过“三次握手”建立连接;

        ③保证网络通畅,然后再进行数据传输,在连接中可进行大数据量的传输;

        ④断开时进行“四次挥手”,保证客户端和服务器都知情;

        ⑤因为要建立连接,所以传输速率相比于UDP速率慢。

        ⑥TCP协议进行通信的两个应用进程:客户端、服务端。

2.2.2 IP协议 

IP(互联网协议)是一种网络层协议,负责在网络中定位和路由数据包。IPv4和IPv6是两个主要版本,其中IPv6解决了IPv4地址枯竭的问题。IP协议通过在数据包头部添加源和目标地址,使得数据包能够在网络中正确传递。

0 ~ 1024 未被系统使用或保留的端口号,0 ~ 65535为有效的端口号, 也就是说我们要对一些程序定义端口号的时候,要选择1024 ~ 65535范围内的整数数字。例如:Tomcat占用8080端口

 2.3 Socket概念


      - Socket是一种通信的端点,用于实现网络上不同计算机之间的数据传输。在Java中,Socket编程是通过Socket类来实现的。服务器端使用ServerSocket监听客户端的连接请求,而客户端使用Socket建立与服务器的连接,通过Socket进行数据传输。

2.4 URL和URI的区别


      - 统一资源标识符(URI)是用于标识资源的字符串,而统一资源定位符(URL)是URI的一种具体类型。URL不仅标识资源,还提供了定位该资源的手段,包括协议、主机名、端口号和路径等信息。因此,URL是URI的子集,URL可用于定位和访问网络上的资源。

3. Java Socket编程

   3.1 Socket基础


      1. 创建Socket
         - 在Java中,通过使用`Socket`类可以创建Socket实例。以下是一个简单的例子:

    Socket clientSocket = new Socket("server_ip", 8080);

      2. 服务器端Socket
         - 服务器使用`ServerSocket`类来监听客户端的连接请求。以下是服务器端Socket的简单示例代码:

ServerSocket serverSocket = new ServerSocket(8080);Socket clientSocket = serverSocket.accept();

      3. 客户端Socket
         - 客户端使用`Socket`类连接到服务器。以下是客户端Socket的简单示例代码:

Socket clientSocket = new Socket("server_ip", 8080);

   3.2 Socket通信


      1. **TCP通信**
         - TCP是一种面向连接的协议,以下是使用TCP进行通信的简单示例代码:

         // 服务器端ServerSocket serverSocket = new ServerSocket(8080);Socket clientSocket = serverSocket.accept();// 客户端Socket clientSocket = new Socket("server_ip", 8080);

      2. **UDP通信**
         - UDP是一种无连接的协议,以下是使用UDP进行通信的简单示例代码:

         // 服务器端DatagramSocket serverSocket = new DatagramSocket(9876);// 客户端DatagramSocket clientSocket = new DatagramSocket();

   C. **Socket编程实例**
      - 下面是一个简单的Socket编程实例,演示了一个基于TCP的服务器和客户端之间的通信:

      // 服务器端try {ServerSocket serverSocket = new ServerSocket(8080);Socket clientSocket = serverSocket.accept();// 输入流BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));String clientMessage = in.readLine();System.out.println("Client says: " + clientMessage);// 输出流PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);out.println("Hello from server!");// 关闭连接in.close();out.close();clientSocket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}// 客户端try {Socket socket = new Socket("server_ip", 8080);// 输出流PrintWriter out = new PrintWriter(socket.getOutputStream(), true);out.println("Hello from client!");// 输入流BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));String serverMessage = in.readLine();System.out.println("Server says: " + serverMessage);// 关闭连接out.close();in.close();socket.close();} catch (IOException e) {e.printStackTrace();}

      这个完整的例子演示了服务器端和客户端的输入输出流的使用,以及在通信结束后关闭连接。

4. HTTP协议与URLConnection

  4.1 HTTP基础


      - HTTP(超文本传输协议)是一种用于传输超媒体文档(如HTML)的应用层协议。它是无状态的,采用请求-响应模型。了解HTTP协议对于在Web开发中进行网络通信至关重要。

   4.2 Java中的HTTPURLConnection


      - `HttpURLConnection`是Java中用于发送HTTP请求和处理HTTP响应的类。它是`URLConnection`的子类,提供了更方便的HTTP操作接口。

   4.3 发送GET和POST请求


      - 通过`HttpURLConnection`可以轻松发送GET和POST请求,以下是简单的示例代码:

      // 发送GET请求URL url = new URL("https://example.com/api/resource");HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");// 读取响应BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;StringBuilder response = new StringBuilder();while ((line = reader.readLine()) != null) {response.append(line);}reader.close();// 发送POST请求URL postUrl = new URL("https://example.com/api/resource");HttpURLConnection postConnection = (HttpURLConnection) postUrl.openConnection();postConnection.setRequestMethod("POST");postConnection.setDoOutput(true);// 写入POST数据OutputStream outputStream = postConnection.getOutputStream();outputStream.write("post_data=example".getBytes());outputStream.flush();outputStream.close();// 读取POST响应BufferedReader postReader = new BufferedReader(new InputStreamReader(postConnection.getInputStream()));StringBuilder postResponse = new StringBuilder();String postLine;while ((postLine = postReader.readLine()) != null) {postResponse.append(postLine);}postReader.close();

      这是一个简单的HTTP请求和响应的例子,实际应用中可能需要处理更多的细节和异常。

参考文章:

https://blog.csdn.net/allenfoxxxxx/article/details/90707505

https://blog.csdn.net/m0_58450531/article/details/125781027

相关文章:

Java网络编程:概述--快速入门

I. 介绍 1.1 什么是网络编程 - 网络编程是指通过计算机网络实现程序之间的通信。在Java中,网络编程通常涉及到数据的传输、通信协议的使用以及与网络相关的各种操作。 1.2. 为什么学习Java网络编程 - Java网络编程是Java开发者重要的技能之一,因为它允许…...

linux配置DNS主从服务器

实验设备 主服务器:OpenElur Linux IP地址为192.168.188.129 从服务器:RedHat Linux IP地址为192.168.188.128 实验步骤 1.进行主服务器的基础配置 #安装DNS对应工具 [rootOpenElurRJW ~]# yum install bind -y#编辑DNS系统配置信息 [rootOpenElurRJW ~]# cat /etc/named.…...

Day34 贪心算法 part03 1005. K 次取反后最大化的数组和 134. 加油站 135. 分发糖果

贪心算法 part03 1005. K 次取反后最大化的数组和 134. 加油站 135. 分发糖果 1005. K 次取反后最大化的数组和 思路 第一步,从前向后遍历,遇到负数将其变为正数,同时K–第二步:如果K还大于0,那么反复转变数值最小的…...

最全对象存储(云盘)挂载本地主机或服务器

1.对象存储介绍 1.1 分类 分布式存储的应用场景相对于其存储接口,现在流行分为三种: 块存储: 这种接口通常以QEMU Driver或者Kernel Module的方式存在,这种接口需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口,块存储一般…...

24校招,江淮汽车软件测试工程师技术面+HR面

前言 记录一下楼主的面试经历,希望对后来者有用 时间:15min 平台:腾讯会议 过程 技术面试 自我介绍 为啥不考研 实习收获 你有做过软件开发的工作吗? 除了Java和Python,还会其他的语言吗? 学过C吗…...

从零开始学习Zeppelin:大数据可视化分析的交互式开发系统!

介绍:Apache Zeppelin是一个基于Web的交互式开发系统,主要用于进行大数据可视化分析。其核心概念是notebook,所有的操作都可以在notebook中完成。Zeppelin提供了一套非常全面的数据分析解决方案,支持数据采集、数据发现、数据分析…...

VCG 曲面重建之滚球算法

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 滚球算法(BPA)是一种与alpha形状相关的曲面重建方法。直观地想象一个具有给定半径的3D球,我们把它扔在点云上。如果它击中任何3个点(并且它没有穿过这3个点),它就创造了一个三角形。然后,算法从现有三角形的边缘…...

为什么使用双token实现无感刷新用户认证?

单token机制 认证机制:对与单token的认证机制在我们项目中仅使用一个Access Token的访问令牌进行用户身份认证和授权的方案处理。 不足之处: 安全性较低(因为只有一个token在客户端和服务器端之间进行传递,一目Acess Token被截获或者被泄露…...

论文阅读 Self-Supervised Burst Super-Resolution

这是一篇 ICCV 2023 的文章,主要介绍的是用自监督的方式进行多帧超分的学习 Abstract 这篇文章介绍了一种基于自监督的学习方式来进行多帧超分的任务,这种方法只需要原始的带噪的低分辨率的图。它不需要利用模拟退化的方法来构造数据,而且模…...

Spring+SpringMVC+Mybatis进行项目的整合

Spring SpringMVCM Mybatis 整合 一、 通过idea创建maven工程 二、 引入依赖项以及导入mybatis逆向工程的插件 将如下的文件替换所在工程的pom文件 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4…...

vue3 实现简单计数器示例——一个html文件展示vue3的效果

目的&#xff1a;作为一个新手开发&#xff0c;我想使用 Vue 3 将代码封装在 HTML 文件中时&#xff0c;进行界面打开展示。 一、vue计数示例 学了一个简单计数器界面展示&#xff0c;代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head&…...

面试经典150题(88-89)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第四十四天&#xff09;完成了2道(88-89)150&#xff1a; 88.(22. 括号生成) 题目描述&#xff1a; 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效…...

【设计模式-3.3】结构型——享元模式

说明&#xff1a;说明&#xff1a;本文介绍设计模式中结构型设计模式中的&#xff0c;享元模式&#xff1b; 游戏地图 在一些闯关类的游戏&#xff0c;如超级玛丽、坦克大战里面&#xff0c;游戏的背景每一个关卡都不相同&#xff0c;但仔细观察可以发现&#xff0c;其都是用…...

【征服redis6】Redis的内存淘汰详解

目录 1.redis的基本策略 2.Redis中的缓存淘汰策略 3.Redis内存不足的情况 4.几种淘汰策略的实现原理 5.项目实践与优化策略 5.1 配置案例 5.2 项目优化策略参考 数据库存储会将数据保存到磁盘中&#xff0c;而Redis的核心数据是在内存中的&#xff0c;而Redis本身主要用来…...

多文件转二维码的两种方式,有兴趣的了解一下

多个文件能一键生成二维码吗&#xff1f;二维码是现在很多人用来展示文件内容的一种手段&#xff0c;在制作二维码图片之后&#xff0c;其他人扫码就可以查看文件或者下载文件&#xff0c;有效的提升文件获取的效率。一般情况下&#xff0c;文件二维码分为多个文件生成一个二维…...

uniapp APP接入Paypal

1. 登录paypal开发者中心&#xff0c; 2. 选择 Apps & Credentials 点击 Create App创建应用&#xff0c;创建后点击编辑按钮&#xff0c;如图&#xff1a; 3. 进入应用详情&#xff0c;勾选Log in with PayPal点击 Advanced Settings 添加return URL等信息并保存。如图&a…...

QT-贪吃小游戏

QT-贪吃小游戏 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "Snake.h" #include "Food.h" #include "Stone.h" #include "Mushroom.h" #include "Ai.h" #include "Game.h" #inclu…...

HubSpot:如何设计和执行客户旅程?

在当今数字化时代&#xff0c;企业成功的关键之一是建立并优化客户旅程。HubSpot作为一体化市场营销平台&#xff0c;通过巧妙设计和执行客户旅程&#xff0c;实现了个性化决策&#xff0c;关键节点的精准引导&#xff0c;为企业带来了数字化转型的引领力。 一、HubSpot是如何设…...

【Go学习】macOS+IDEA运行golang项目,报command-line-arguments,undefined

写在前面的话&#xff1a;idea如何配置golang&#xff0c;自行百度 问题1&#xff1a;通过idea的terminal执行go test报错 ✘ xxxxxmacdeMacBook-Pro-3  /Volumes/mac/.../LearnGoWithTests/hello  go test go: go.mod file not found in current directory or any parent …...

优先看我的博客:工控机 Ubuntu系统 输入密码登录界面后界面模糊卡死,键盘鼠标失效(不同于其他博主的问题解决方案,优先看我的博客。)

工控机Ubuntu 输入密码登录界面后界面模糊卡死&#xff0c;键盘鼠标失效 &#xff08;不同于其他博主的问题解决方案&#xff0c;工控机Ubuntu的系统 优先看我的博客。&#xff09; 系统版本&#xff1a;ubuntu18.04 主机&#xff1a;工控机 应用场景&#xff1a;电力系统巡…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...