Java后端学习系列(5):Java网络编程基础

Ubuntu 22.04 搭建 PX4 飞控系统完全指南:从仿真到硬件试飞 定义消息文件protobufuint64 timestamp # 时间戳float32 temperature # 温度float32 humidity # 湿度生成代码:bashPX4 在 Ubuntu 22.04 的搭建涉及环境配置、编译仿真、硬件连接等多环节,核心是理解 PX4 1.14 的新特性(uXRCE-DDS、动态控制分配)。通过本文指南,开发者可快速构建稳定的 PX4 开发环境,为无人机应用开发奠定基础。 阅读详情

Java后端学习系列(5):Java网络编程基础

前言

经过前面几期对Java多方面知识的学习,我们已经积累了不少基础。在当今互联网时代,网络编程是Java后端开发中不可或缺的一部分,它让不同的计算机之间能够相互通信、协同工作。本期我们就来深入探讨Java网络编程的基础内容,为后续构建分布式、网络应用等打下坚实基础。本系列共15期,会持续引领大家探索Java后端的各个知识领域。

一、TCP/IP协议基础与Java中的实现

1.1 TCP/IP协议概述

TCP/IP协议是一组用于实现网络通信的协议族,它包含了多个层次的协议,其中最核心的是传输控制协议(TCP)和网际协议(IP)。

  • IP协议:主要负责在网络中对数据包进行寻址和路由选择,确保数据能够从源主机发送到目标主机,它是一种无连接的、不可靠的协议,只关注数据包的转发。
  • TCP协议:是一种面向连接的、可靠的传输协议,它在IP协议的基础上,为应用程序提供了可靠的字节流传输服务,通过建立连接、确认机制、重传机制等确保数据准确无误地到达对方。

1.2 Java中基于TCP的实现

在Java中,我们可以通过java.net包下的相关类来实现基于TCP协议的网络通信。

  • ServerSocket类(服务端):用于创建服务器端的套接字,监听指定端口,等待客户端的连接请求,示例如下:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务器启动,等待客户端连接...");
        Socket socket = serverSocket.accept();
        InputStream inputStream = socket.getInputStream();
        OutputStream outputStream = socket.getOutputStream();
        // 在这里可以进行数据的读取和发送操作,比如简单的回显示例
        byte[] buffer = new byte[1024];
        int length = inputStream.read(buffer);
        String message = new String(buffer, 0, length);
        System.out.println("收到客户端消息:" + message);
        outputStream.write(message.getBytes());
        socket.close();
        serverSocket.close();
    }
}
  • Socket类(客户端):客户端通过Socket类来创建套接字,指定服务器的IP地址和端口,发起连接请求,示例:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 8888);
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("Hello Server".getBytes());
        InputStream inputStream = socket.getInputStream();
        byte[] buffer = new byte[1024];
        int length = inputStream.read(buffer);
        String message = new String(buffer, 0, length);
        System.out.println("收到服务器回复:" + message);
        socket.close();
    }
}

通过上述代码,客户端和服务器端能够基于TCP协议建立连接并进行简单的数据交互。

二、Socket编程基础与简单通信示例

2.1 Socket编程概念

Socket(套接字)是网络通信中应用层与传输层之间的接口,它提供了一种机制,让不同主机上的进程能够通过网络进行通信。在Java中,无论是基于TCP还是UDP协议的网络通信,都离不开Socket相关的编程。

2.2 简单通信示例(再扩展一点)

除了上面基于TCP的简单回显示例,我们可以实现一个简单的聊天程序示例,让客户端和服务器端可以多次发送消息进行交互:
服务器端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ChatServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("聊天服务器启动,等待客户端连接...");
        Socket socket = serverSocket.accept();
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        OutputStream outputStream = socket.getOutputStream();
        String line;
        while ((line = reader.readLine())!= null) {
            if ("bye".equals(line)) {
                break;
            }
            System.out.println("客户端说:" + line);
            outputStream.write(("服务器回复:" + line).getBytes());
            outputStream.write("\n".getBytes());
            outputStream.flush();
        }
        socket.close();
        serverSocket.close();
    }
}

客户端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class ChatClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 8888);
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        OutputStream outputStream = socket.getOutputStream();
        BufferedReader serverReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line;
        while ((true)) {
            line = reader.readLine();
            outputStream.write((line + "\n").getBytes());
            outputStream.flush();
            if ("bye".equals(line)) {
                break;
            }
            String serverMessage = serverReader.readLine();
            System.out.println(serverMessage);
        }
        socket.close();
    }
}

通过这样的代码,就可以实现客户端和服务器端较为简单的聊天互动,进一步体现了Socket编程在网络通信中的应用。

三、UDP协议在Java中的应用

3.1 UDP协议特点

UDP(用户数据报协议)是一种无连接的、不可靠的传输协议,它不像TCP那样需要建立连接、保证数据的可靠传输等复杂机制,数据传输效率相对较高,适用于对实时性要求较高但对数据准确性要求不是特别苛刻的场景,比如视频直播、游戏中的实时数据传输等。

3.2 Java中基于UDP的实现

在Java中,通过DatagramSocket类和DatagramPacket类来实现基于UDP协议的网络通信。

  • 发送端示例:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPSender {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket();
        String message = "UDP消息示例";
        byte[] data = message.getBytes();
        DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("127.0.0.1"), 9999);
        socket.send(packet);
        socket.close();
    }
}
  • 接收端示例:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPReceiver {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(9999);
        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
        socket.receive(packet);
        String message = new String(packet.getData(), 0, packet.getLength());
        System.out.println("收到UDP消息:" + message);
        socket.close();
    }
}

通过上述代码可以看到,基于UDP协议进行数据发送和接收相对简洁,不过要注意其不可靠性带来的数据丢失等风险。

四、网络编程中的异常处理与优化

4.1 异常处理

在网络编程中,由于网络环境的不确定性,很容易出现各种异常情况,比如连接超时、网络中断等。所以在代码中要合理地使用try-catch语句来捕获相关异常,例如:

try {
    Socket socket = new Socket("127.0.0.1", 8888);
    // 后续操作
} catch (IOException e) {
    System.out.println("连接服务器出现异常:" + e.getMessage());
}

同时,对于一些可能出现阻塞的操作(如ServerSocket的accept方法、Socket的read方法等),要考虑使用多线程等方式避免阻塞主线程,保证程序的整体流畅性。

4.2 优化措施

  • 连接池技术:在频繁创建和销毁Socket连接的场景中,可以考虑使用连接池,提前创建好一定数量的连接,需要时从池中获取,使用完后归还,减少连接创建和销毁的开销,提高效率。
  • 缓存机制:对于一些经常访问的数据,可以在本地设置缓存,减少网络传输的数据量,加快响应速度,不过要注意缓存的一致性问题,及时更新缓存数据。

五、下一步学习建议

  1. 项目实践:尝试基于所学的网络编程知识,开发一个简单的网络应用,比如多人在线的小游戏、简单的文件传输工具等,通过实际项目深入理解网络通信的整个流程以及如何处理各种实际问题。
  2. 深入学习协议:进一步深入学习TCP/IP协议族中的其他协议,了解它们在网络通信中的作用以及如何与Java代码更好地结合应用,拓宽网络编程的知识面。
  3. 性能分析:对自己编写的网络编程代码进行性能分析,找出可能存在的瓶颈点,尝试运用不同的优化方法去改进,提升网络应用的性能表现。

下期预告

《Java后端学习系列(6):Java数据库操作基础(JDBC)》

  • JDBC的基本概念与架构
  • 数据库连接的建立与配置
  • SQL语句在Java中的执行
  • 事务处理基础与应用

网络编程是一个充满挑战和趣味的领域,希望大家通过不断实践和探索,扎实掌握Java网络编程的相关知识。如果在学习过程中有任何疑问或者心得,欢迎在评论区分享交流,我们下期再见。

torch.nn.rnn实现循环神经网络 ------------------------------------nn.rnn模型实现。#------------------------------------模型实现。#-----------------------------------训练模型。#-----------------------------------训练模型。#--------------------------------读取数据。实现循环神经网络,并在至少一个数据集上进行实验,从训练时间、预测精度、... 阅读详情

相关推荐

PyCharm中Pyvips配置避坑指南:为什么pip安装后import还是报错?

本文详细解析了在PyCharm中配置Pyvips时,即使pip安装成功,import仍报错的根本原因。核心在于Pyvips依赖的libvips原生库未正确配置环境变量。文章提供了从下载libvips、配置Windows系统PATH到PyCharm项目级设置的完整避坑指南,并对比了三种配置策略,帮助开发者彻底解决DLL加载失败问题。

bush的博客 209

Java 网络编程

网络编程 一、网络编程基础概念 首先理清一个概念:网络编程不等于网站编程,网络编程即使用套接字来达到进程间通信,现在一般称为TCP/IP编程。 计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大,功能强的网络系统,从而使众多的计算机可以方便的互相传递信息,共享硬件,软件,数据信息等资源。 计算机网络的主要功能: 资源共享 信息传输与集中处理 均衡负荷与分布处理 ...

ZaynFox的博客 6万+

湿式双离合器自动变速器simulink建模与仿真

随着汽车工业的不断发展,自动变速器在提高汽车性能、驾驶舒适性和燃油经济性等方面发挥着越来越重要的作用。湿式双离合器自动变速器(Wet Dual-Clutch Transmission,简称 WDCT)作为一种先进的自动变速器技术,具有换挡速度快、动力传递平稳、燃油经济性好等优点,被广泛应用于各类汽车中。结构组成湿式双离合器自动变速器主要由双离合器、齿轮传动系统、液压控制系统和电子控制系统等部分组成。双离合器:由两个独立的离合器组成,分别控制奇数挡和偶数挡。通过切换两个离合器的工作状态,可以实现快速换挡。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 348

Java后端学习路线图,你真的只需要这一张!

原文链接 前言 学习路线图往往是学习一样技术的入门指南。网上搜到的Java学习路线图也是一抓一大把。 今天我只选一张图,仅此一图,足以包罗Java后端技术的知识点。所谓不求最好,但求最全,学习Java后端的同学完全可以参考这张图进行学习路线安排。 当然,有一些知识点是可选的,并不是说上面有的你都要会啦。我在复习秋招的过程中就是基于此图进行复习的,感觉效果还是不错的。 闲言少叙,我们还...

Java技术江湖 6万+

环境配置与基础教程:当前大厂主流套路:使用 MLflow 全链路管理 YOLO 实验参数、指标与模型版本

YOLO26与MLflow结合实现高效实验管理 YOLO26通过移除DFL模块和实现无NMS端到端推理,在CPU推理速度上提升43%,同时简化了模型导出流程。MLflow 3.10/3.11版本新增多工作区支持、成本追踪和安全序列化等功能,为机器学习实验提供全生命周期管理。两者结合可解决传统"截图+Excel"式实验管理的痛点,实现参数追踪、指标对比和模型版本控制的自动化。 关键优势: YOLO26架构优化带来显著性能提升 MLflow提供实验到生产的全链路管理 原生集成简化了计算机视觉

ZXSXJ的博客 190

RK3568平台开发系列讲解(NPU篇)什么是RKNPU

📢本篇章将介绍RKNPU。

内核笔记 4353

Java基础(二十四):网络编程

回复一个彻底断开的报文。

从基础到源码解析的学习记录 1610

学Simulink——四开关 Buck‑Boost(FSBB)变换器的无缝模式切换仿真

本文详细介绍了使用Simulink实现四开关Buck-Boost(FSBB)变换器无缝模式切换的仿真方法。FSBB变换器因其输入输出同极性、单电感和双向能量流特性,广泛应用于光伏储能、USB-PD和车载电源等场景。文章重点解决了模式切换中的直通风险和占空比跳变问题,通过统一电压PI控制、Stateflow模式仲裁和200ns死区设计,实现了Buck(26V→24V)、Pass-Through(24V±1V)和Boost(22V)三种工作模式的无缝过渡。仿真结果显示输出电压稳定在12V±0.15V,切换过程无

amy_mhd的博客 65

Java后端学习路线

java后端学习安排 一:说明 该学习安排以“Java后端学习进阶路线.xmid”为依据。旨在胜任当前工作情况下进一步提高自己的技术水平。以胜任当前工作为前提进行合适的调整。以下学习计划的内容是“Java后端学习进阶路线.xmid”中的前三阶段,后两个阶段暂时不做考虑,等以后有一定工作经验了再做考虑进一步学习,现在应该接触不到,也不可能学完的。 二:学习内容 <一> JavaSE 1:...

上园村一霸的博客 2015

电机驱动和电源等大电流设计中的并联 MOSFET设计

在电机驱动等应用中,半桥拓扑(通常为 3 相)用于生成在电机中产生正扭矩或负扭矩的交流电源信号。想要更高的输出电流能力,只有通过并联形成每个功能开关的 MOSFET,才能实现高输出电流。当多个功率 MOSFET 并联以增加系统整体电流能力容量时,通常假设电流在并联器件之间均等分配或均等共享。然而,在并联 MOSFET 时,需要考虑并联器件之间的电流分配。PCB 布局的若干特性和特定的MOSFET 参数会影响这种分配,并在参数不匹配或布局不对称时导致均流不平衡。

小幽余生不加糖 2484

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

小白自学Java后端学习计划(附带学习视频)

一、Java基础 java基础语法 集合 io 多线程 并发 反射 网络编程 注意:对于Java基础,其中集合和io是初学Java后端的时候最常用的,特别是集合。对于多线程、并发、反射和网络编程,初学后端的时候基本用不到,因为你初学的时候不会涉及到这么深的技术,当然不代表不需要会,如果你面试肯定还是要会的。 这里学习Java,建议学习Java8(windows下安装Java8并配置环境变量...

理木客 4825

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java后端开发学习路线

前言 最近春招开始了,很多校招同学想从事Java开发的工作,但是不是很了解这里可以把我之前的学习路线分享一下。有困难的同学私聊加群,一起学习备战春招。 基本大纲 上述这些,简单的说一下都有哪些重点和资料。 Java基础 Java基础指的是对Java语言的理解,主要包括Java语法,面向对象基础,Java关键字的使用和理解,集合类和常用类,异常机制,Java IO等。 关于这方面,有一个课程可以推荐: Java300集 这个课程是尚学堂出品的,很经典,讲的也很通俗易懂。可以根据自己的情况选择一些章节。这个课程

YG爱木木 1940

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java基础系列十二 Java网络编程

Java基础系列第十二章 Java网络编程 网络编程基础:通信协议、Java网络编程,IP地址与InetAddress类,通信端口与URL类,Socket技术:Socket类、ServerSocket类、TCP协议

924

Java后端学习系列(1):从零开始的Java基础与学习路线

本文将开启Java后端工程师的成长之路,针对零基础学习者设计,系统性地梳理Java后端核心技术栈。本系列共15期,将涵盖从基础语法到分布式架构的全栈内容,助你构建完整的Java知识体系。

Azperk的博客 634

Java学习之网络编程基础

Java网络编程基础1 网络编程入门1.1软件结构1.2 通信协议1.3 TCP/IP协议1.4 网络编程三要素1.4.1 协议1.4.2 IP地址1.4.2.1 IP地址的分类1.4.2.2 常用命令1.4.3 端口号2 TCP通信程序2.1 概述2.2 Java中的实现2.2.1 Socket类构造方法:常用成员方法2.2.2 ServerSocket类构造方法成员方法2.2.3 简单的TCP...

梅大志没大志 830

java后端学习

java后端学习重点: 1.java语言特性: 基础知识,集合,多线程,并发,JVM,NIO,网络编程,设计模式。 (★★★★★) jdk源码中有大量的数据结构与java语言细节。jdk源码着重看concurrent、collection、sort、nio、util。 2.计算机基础知识: 数据库(索引和锁等基础及sql优化)。网络(http协议、tcp协议)。数据结构。算法。操作系统。计算机组...

Yfw的博客 682

五分钟学Java:如何学习Java面试必考的网络编程

原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 本文思维导图 简介 Java作为一门后端语言,对于网络编程的支持是必不可少的,但是,作为一个经常CRUD的Java工程师,很多时候都不需要接触到网络编程,自然而然地对这个东西不那么重视了,毕竟,即使像是JVM虚拟机,Java多线程,在平时工作的时候还会用到一些,但是对于网络编程,除非你做的东西确实是需要自己写通讯服务代码的,比如...

Java技术江湖 1751

Java后端学习路线图,你真的只需要这一张

前言 学习路线图往往是学习一样技术的入门指南。网上搜到的Java学习路线图也是一抓一大把。 今天我只选一张图,仅此一图,足以包罗Java后端技术的知识点。所谓不求最好,但求最全,学习Java后端的同学完全可以参考这张图进行学习路线安排。 当然,有一些知识点是可选的,并不是说上面有的你都要会啦。我在复习秋招的过程中就是基于此图进行复习的,感觉效果还是不错的。 闲言少叙,我们还是看看这张图上都包含哪些有价值的信息吧。再次说明,本文只对路线图做一个简单地解读,仅供参考。大家可以根据自身情况来指定合理的学习

m0_69424697的博客 3686

Java基础之Java网络编程详解

网络编程是现代软件开发中不可或缺的一部分,它通过网络实现了计算机之间的通信,使得信息交换和数据共享成为可能。在网络通信的实现过程中,语言的选择和工具的使用至关重要,而Java提供了强大的支持,使得开发者可以更便捷地构建网络应用程序。网络通信的核心是数据的发送与接收,而Java的网络编程模型为此提供了一套易用且高效的工具。无论是点对点的通信,还是基于更复杂协议的多节点交互,Java都能满足需求。在网络编程中,基础的通信模式是基于Socket的点对点连接,它可以实现客户端和服务器之间的直接通信。

道可道非常道 2064

自己的后端的学习路线

学习路线 0. 准备阶段  1. 配置Windows10环境   1. 安装开发软件  2. 配置Linux环境   1. 安装JDK   2. 安装MySQL数据库  3. 配置版本控制工具   1. 配置使用Git   2. 配置使用svn   3. 配置使用Jenkins 1. Java部分  1. Java基础   1. JDBC   2. Mybatis   3. JSON解析   ...

散场前的温柔的博客 3409

Java后端学习之路

---本文整理的来源是51CTO博客内容,已下为版权声明--- 作者:知左至右 链接:https://blog.51cto.com/14825857/2498677 来自:51CTO 学习真的是一个循序渐进的过程,也是一件需要坚持的事情。对于这篇文章,不同阶段的人可能有不同的理解,所以我把我整理的比较全面的java学习路线分享给大家,以供参考。下面的这个学习路线主要针对于那些刚刚学习了java,但是还没有深入理解的同学。我大概把学习流程分了三个阶段。 Java后端学习之路第一阶段:基础阶段一、数据结构

逍遥Sean的博客 318

​​Java后端学习路线图,后端思维导图,后端学习大图,你真的只需要这一张!

Java后端学习路线图,你真的只需要这一张! 这里写目录标题前言学习路线图1 计算机基础2 Java编程Java基础设计模式Java Web技术Java并发技术Java网络编程和服务器Jvm基础与调优3 Linux4 数据相关关系数据库Mysql缓存搜索引擎大数据5 算法和数据结构6 分布式web架构分布式理论一致性问题分布式session分布式缓存分布式数据库负载均衡消息队列服务化虚拟化 前言 学习路线图往往是学习一样技术的入门指南。网上搜到的Java学习路线图也是一抓一大把。 今天我只选一张图,仅此一图

沧海一声浪的博客 1521

我最推荐的一张Java后端学习路线图,Java工程师必备

前言 学习路线图往往是学习一样技术的入门指南。网上搜到的Java学习路线图也是一抓一大把。 今天我只选一张图,仅此一图,足以包罗Java后端技术的知识点。所谓不求最好,但求最全,学习Java后端的同学完全可以参考这张图进行学习路线安排。 当然,有一些知识点是可选的,并不是说上面有的你都要会啦。我在复习秋招的过程中就是基于此图进行复习的,感觉效果还是不错的。 闲言少叙,我们还是看看这张图上都包含...

Java技术江湖 1816
上一篇: Java后端学习系列(4):Java多线程与并发编程基础
下一篇: Java后端学习系列(6):Java数据库操作基础(JDBC)
DoYangTan
博客等级 码龄5年 1946粉丝 319原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值