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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/332058.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS —— buildMode 设置(对比 Android Build Varient)

前言 在安卓中 Build Variant 主要依赖模块(module)中 build.gradle 的 BuildType 和 ProductFlavor 提供的属性和方法,我们可以使用 Build Type 可以配置不同的构建方式、ProductFlavor 主要用来进行多渠道打包。 在鸿蒙中要做到同样像效果…

Spring Boot 配置文件和日志

目录 配置文件格式 properties配置文件说明 1.properties基本语法 2.读取配置文件 3.properties缺点 yml配置文件说明 1.yml基本语法 2.配置不同数据类型 3.字符串特殊情况 4.配置对象 properties和yml对比 日志 日志的使用 日志级别 日志持久化 Lombok Lombo…

计算机网络课程设计-网络聊天程序的设计与实现

目录 前言 1 实验题目 2 实验目的 3 实验内容 3.1 客户端 3.1.1 步骤 3.1.2 关键代码 3.2 服务器 3.2.1 步骤 3.2.2 关键代码 4 实验结果与分析 5 代码 5.1 客户端 5.2 服务器 前言 本实验为计算机网络课程设计内容,基本上所有代码都是根据指导书给的附…

1.18寒假集训

A: 解题思路&#xff1a; 这题看似很复杂&#xff0c;其实很简单&#xff0c;找规律不难发现就是输出n 1 下面是c代码&#xff1a; #include<iostream> using namespace std; int main() {int n;cin >> n;cout << n 1;return 0; } B: 解题思路&#xf…

3dmax中怎么在模型上开洞?

3dmaxS是Autodesk公司开发的基于PC系统的三维动画渲染和制作软件。我们可以使用它来做各种模型。那么怎么在模型上开洞呢&#xff1f;我们一起来看看吧&#xff01; 1、首先我们打开我们的3damx&#xff0c;这里面我使用的版本为3damxs2012,虽然版本可能各不相同。但是功能并没…

【RT-DETR有效改进】轻量级视觉变换器RepViT改进特征提取网络(轻量化网络)

前言 大家好&#xff0c;我是Snu77&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持Re…

数据库MySQL----多表查询

二、多表查询 1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); CREATE TABLE score ( id INT(10) NOT…

翻遍全网才找到的Oracle19c安装教程(Windows版)

一、下载 官方地址&#xff1a;Database Software Downloads | Oracle 中国 我下载下来了&#xff0c;有需要的可以网盘领取。 链接&#xff1a;https://pan.baidu.com/s/1-OeiuoBX3K4X7Kw7vGxdFA?pwdhssy 提取码&#xff1a;hssy 二、解压 下载下来是一个zip格式的压缩…

Java爬虫爬取图片壁纸

Java爬虫 以sougou图片为例&#xff1a;https://pic.sogou.com/ JDK17、SpringBoot3.2.X、hutool5.8.24实现Java爬虫&#xff0c;爬取页面图片 项目介绍 开发工具&#xff1a;IDEA2023.2.5 JDK&#xff1a;Java17 SpringBoot&#xff1a;3.2.x 通过 SpringBoot 快速构建开发环境…

身份验证遇到问题,登陆ChatGPT时提示:“we ran into an issue while authenticating you…”

oops&#xff01; we ran into an issue while authenticating you, if this issue persists, please contact us through our help center at help.openai.com 说明&#xff1a;哎呀&#xff01;我们在验证您的身份时遇到了一个问题&#xff0c;如果这个问题仍然存在&#xff…

Linux:shell脚本:基础使用(8)《函数局部|全局变量函数传入位置变量return》

基本的函数定义 把一些重复调用的命令写进一个函数里&#xff0c;下次直接调用函数名&#xff0c;这样的既方便修改&#xff0c;又可以让思路清晰 function 函数名(){ 当调用这个函数时候执行的命令...... } 这个是一个基础的函数定义&#xff0c;当然你不加function也是可以的…

从 GPT1 - GPT4 拆解

从 GPT1 - GPT4 拆解 从 GPT1 - GPT4GPT1&#xff1a;更适用于文本生成领域GPT2&#xff1a;扩展数据集、模型参数&#xff0c;实现一脑多用&#xff08;多个任务&#xff09;GPT3&#xff1a;元学习 大力出奇迹InstructGPT&#xff1a;指示和提示学习 人工反馈强化学习 RLHF…

实验二 体系结构

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

Open3D 点云转深度图像

目录 一、算法原理1、算法过程2、主要函数二、代码实现三、结果展示1、点云2、深度图像四、测试数据Open3D 点云转深度图像由CSDN点云侠原创。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。<

TypeScript 中的深拷贝和浅拷贝

什么是深拷贝 在JavaScript/TypeScript中&#xff0c;深拷贝是指创建一个对象的副本&#xff0c;而不仅仅是创建对原始对象的引用。对复制的对象进行的任何更改都不会影响原始对象&#xff0c;反之亦然。 这个副本将完全复制基础对象&#xff0c;包括每个嵌套级别的所有属性和…

在vite5和vue3开发环境中使用jodit4富文本编辑器,并添加自定义插件和使用highlight.js实现代码块高亮(附其他自定义配置项和全部代码)

最近富文本编辑器jodit终于更新发布到了4.0版本&#xff0c;加入了css变量、有更好的typescript支持&#xff0c;截止发文时的版本是&#xff1a;4.0.5&#xff0c;看到有了新版本于是便想着将本地项目中的jodit版本也进行升级&#xff0c;琢磨着再丰富和添加一些功能&#xff…

excel 各种用法

excel 各种用法 实现两张表格数据关联 vlookup 实现两张表格数据关联 vlookup 实现两个 sheet 间的关联需要用 vlookup 函数实现 函数第一个参数设置成 sheet1 中的 A 列&#xff08;如果数据很多&#xff0c;可以直接选中 A 列&#xff09; 函数的第二个参数选中 sheet2 中…

android 和 opencv 开发环境搭建

本文详细说明给android项目添加opencv库的详细步骤&#xff0c;并通过实现图片灰度化来查看配置是否成功。 下载OPENCV ANDROID SDK 到官网下载 打开 https://opencv.org/releases/ 选择android&#xff0c;下载完成后解压出下面的文件&#xff1a; 安装android sdk 和 ndk …

YOLOv8全网首发:DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测

💡💡💡本文独家改进:DCNv4更快收敛、更高速度、更高性能,完美和YOLOv8结合,助力涨点 DCNv4优势:(1) 去除空间聚合中的softmax归一化,以增强其动态性和表达能力;(2) 优化存储器访问以最小化冗余操作以加速。这些改进显著加快了收敛速度,并大幅提高了处理速度,DCN…

【CSS】解决height = line-height 文字不垂直居中(偏上、偏下)的问题

解决办法1&#xff1a; 查看 font-family 属性&#xff0c;确认是否是因为字体而导致的不垂直居中问题。 其他小知识&#xff1a; 基线就是小写x字母的下边缘(线) 就是我们常说的 基线。line-height 属性设置的行高也就是定义的两行文字基线之间的距离! 参考文章&#xff1a;…
最新文章