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

网络编程基础:连接Java的秘密网络

1 网络编程的重要性

网络编程允许Java应用程序与其他计算机或设备进行通信。这包括从简单的数据传输到复杂的分布式系统和Web服务。

2 Java网络编程的核心类

Java提供了多个类来支持网络编程:

  • InetAddress:表示网络上的IP地址。

  • URL:表示统一资源定位符,用于访问网络资源。

  • URLConnection:处理从URL指定的网络资源的通信。

  • Socket:用于TCP网络通信。

  • ServerSocket:等待客户端连接的服务器端Socket。

  • DatagramSocket:用于UDP网络通信。

  • DatagramPacket:包含发送或接收数据的UDP数据包。

3 创建客户端-服务器应用

Java网络编程通常涉及创建客户端和服务器应用程序,它们通过Socket进行通信。

示例代码(服务器端)

 
import java.io.*;
import java.net.*;public class Server {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(6789);System.out.println("Server is listening on port 6789");try (Socket socket = serverSocket.accept()) {InputStreamReader input = new InputStreamReader(socket.getInputStream());BufferedReader bufRead = new BufferedReader(input);PrintWriter output = new PrintWriter(socket.getOutputStream(), true);String line;while ((line = bufRead.readLine()) != null) {System.out.println("Client: " + line);output.println("Server: " + line);}}}
}

示例代码(客户端)

 
import java.io.*;
import java.net.*;public class Client {public static void main(String[] args) throws IOException {Socket socket = new Socket("localhost", 6789);InputStreamReader input = new InputStreamReader(socket.getInputStream());BufferedReader bufRead = new BufferedReader(input);PrintWriter output = new PrintWriter(socket.getOutputStream(), true);BufferedReader stdInput = new BufferedReader(new InputStreamReader(System.in));String line;while ((line = stdInput.readLine()) != null) {output.println(line);System.out.println("Server: " + bufRead.readLine());}}
}

4 UDP通信

UDP是一种无连接的协议,适用于需要快速传输但不一定要求可靠到达的场景。

示例代码(UDP服务器)

 
import java.net.*;public class UDPServer {public static void main(String[] args) throws Exception {DatagramSocket serverSocket = new DatagramSocket(9876);byte[] receiveData = new byte[1024];DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);serverSocket.receive(receivePacket);String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength());System.out.println("RECEIVED: " + sentence);serverSocket.close();}
}

示例代码(UDP客户端)

 
import java.net.*;public class UDPClient {public static void main(String[] args) throws Exception {DatagramSocket clientSocket = new DatagramSocket();String sentence = "Hello from client";byte[] buf = sentence.getBytes();InetAddress IPAddress = InetAddress.getByName("localhost");DatagramPacket sendPacket = new DatagramPacket(buf, buf.length, IPAddress, 9876);clientSocket.send(sendPacket);clientSocket.close();}
}

5 多线程网络服务器

为了处理多个客户端,服务器通常需要使用多线程。

示例代码(多线程服务器)

 
import java.io.*;
import java.net.*;public class MultiThreadedServer {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(6789);while (true) {Socket clientSocket = serverSocket.accept();new ClientHandler(clientSocket).start();}}private static class ClientHandler extends Thread {private Socket clientSocket;public ClientHandler(Socket socket) {this.clientSocket = socket;}public void run() {try {InputStreamReader input = new InputStreamReader(clientSocket.getInputStream());BufferedReader bufRead = new BufferedReader(input);PrintWriter output = new PrintWriter(clientSocket.getOutputStream(), true);String line;while ((line = bufRead.readLine()) != null) {System.out.println("Client: " + line);output.println("Server: " + line);}} catch (IOException e) {e.printStackTrace();} finally {try {clientSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

6 安全性考虑

网络编程需要考虑安全性,包括使用SSL/TLS加密通信,处理恶意输入等。

通过这一节的学习,你现在应该对Java中的网络编程基础有了深入的理解。网络编程是现代应用程序不可或缺的一部分,它允许程序跨越网络进行通信和数据交换。掌握网络编程,可以帮助你构建复杂的分布式系统和网络应用。

相关文章:

网络编程基础:连接Java的秘密网络

1 网络编程的重要性 网络编程允许Java应用程序与其他计算机或设备进行通信。这包括从简单的数据传输到复杂的分布式系统和Web服务。 2 Java网络编程的核心类 Java提供了多个类来支持网络编程: InetAddress:表示网络上的IP地址。 URL:表示统…...

无监督学习:自编码器(AutoEncoder)

自编码器:数据的净化之旅 引言 自编码器作为一种强大的特征学习方法,已经经历了从简单到复杂的发展历程。本文综述了多种类型的自编码器及其演进过程,强调了它们在数据降维、图像处理、噪声去除及生成模型等方面的关键作用。随着技术的进步…...

在不到 5 分钟的时间内将威胁情报 PDF 添加为 AI 助手的自定义知识

作者:来自 Elastic jamesspi 安全运营团队通常会维护威胁情报报告的存储库,这些报告包含由报告提供商生成的大量知识。然而,挑战在于,这些报告的内容通常以 PDF 格式存在,使得在处理安全事件或调查时难以检索和引用相关…...

Memcached prepend 命令

Memcached prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据 。 语法: prepend 命令的基本语法格式如下: prepend key flags exptime bytes [noreply] value参数说明如下: key:键值 key-value 结构中的 key&a…...

Win10 VScode配置远程Linux开发环境

Windows VScode配置远程Linux开发环境 记录一下在Windows下VScode配置远程连接Linux环境进行开发的过程。 VScode的远程编程与调试的插件Remote Development,使用这个插件可以在很多情况下代替vim直接远程修改与调试服务器上的代码,搭配上VScode的语言…...

微信小程序校园自助点餐系统实战:从设计到实现

随着移动互联网的发展,越来越多的校园场景开始智能化、自助化。微信小程序凭借其轻量化、便捷性和强大的生态支持,成为了各类校园应用的首选工具之一。今天,我们将通过实际开发一个微信小程序“校园自助点餐系统”来展示如何设计和实现这样一…...

解决sublime编译无法输入问题

在使用sublime编译简单的c语言的时候,发现编译过程中,带有scanf的程序,无法正确的输入。 需要提前配置好gcc 和g++ 一、新增配置 新建编译系统文件:C.sublime-build 具体步骤:菜单中选择Tools——Build System——New Build System——保存文件名C.sublime-build ,填写以…...

const修饰指针总结

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…...

uniapp实现后端数据i18n国际化

1.在main.js配置请求获取到数据再设置到i18n中, 我这里是通过后端接口先获取到一个多个数据的的json链接,通过链接再获取数据,拿到数据后通过遍历的方式设置i18n //接口数据示例:{"vi": "http://localhost:8899/…...

什么是国密设计

国密设计,全称为“国家密码算法设计”,是指中国自主研发的一系列密码学算法和相关的技术标准。这些算法旨在提供安全可靠的加密、解密、签名验证等服务,并且在中国的信息安全领域中扮演着至关重要的角色。以下是关于国密设计的详细解释&#…...

Android IO 问题:java.io.IOException Operation not permitted

问题描述与处理策略 1、问题描述 java.io.IOException: Operation not permittedjava.nio.file.FileSystemException: /storage/emulated/0/test/test.txt: Operation not permittedjava.io.IOException: Operation not permitted:异常为操作不被允许 java.nio.f…...

安装bert_embedding遇到问题

在使用命令: pip install bert-embedding 安装bert_embedding的时候,遇到如下问题: ERROR: Failed cleaning build dir for numpy Successfully built gluonnlp Failed to build numpy ERROR: ERROR: Failed to build installable wheel…...

cka考试-03-k8s版本升级

一、原题 二、解答 [root@master ~]# kubectl get node NAME STATUS ROLES AGE VERSION master Ready control-plane,master 25h v1.22.12 node1 Ready worker 25h v1.22.12 node2 Ready worker …...

【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录一、前言 🍃二、插入方式 💯2.1 单条插入实体2.2 批量 插入实体2.3 根据字典插入2.4 根据 Dat…...

Spring Boot 的自动配置,以rabbitmq为例,请详细说明

Spring Boot 的自动配置特性能够大大简化集成外部服务和组件的配置过程。以 RabbitMQ 为例,Spring Boot 通过 spring-boot-starter-amqp 提供了自动配置支持,开发者只需在应用中添加相关依赖并配置必要的属性,Spring Boot 会自动配置所需的连…...

Visual Studio 2022+Qt6.5.3安装教程+环境配置+创建Qt项目+乱码插件+运行很完美(16岁孩子也能看懂)

点击上方"蓝字"关注我们 01、安装VS2022 >>> 一、安装VS2022 1、VS2022下载链接:Visual Studio 2022 IDE - 适用于软件开发人员的编程工具[https://visualstudio.microsoft.com/zh-hans/vs/] 2、选择Community 2022个人免费版,点击下载[https://gitcode.…...

LeetCode - 初级算法 数组(旋转数组)

旋转数组 这篇文章讨论如何通过编程实现数组元素的旋转操作。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例: 输入: nums = [1,2,3,...

logback日志框架源码分析

目录 (一)入口:slf4j选择日志框架 (二)日志框架初始化 (1)logback的3种配置方式 a、BasicConfigurator默认配置 b、SPI方式配置的Configurator实现类 c、通过配置文件初始化 (2)xml配置文件初始化 (三)Logger的创建 (四)打印日志 本文源码基于:logback版…...

【微服务】3、配置管理

微服务配置管理 已掌握的微服务组件及配置管理问题引出 已掌握注册中心、Openfan、远程调用、负载均衡、网关等组件,具备微服务开发能力,但仍存在其他问题待解决。微服务和网关存在大量配置文件,其中包含很多重复配置,如数据库、日…...

数据分析思维(七):分析方法——群组分析方法

数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》,本文内容就是提取…...

布尔莎七参数坐标转换实战:从理论到C++/Matlab实现

1. 布尔莎七参数模型:测绘工程师的坐标转换利器 第一次接触布尔莎七参数转换是在处理无人机航测数据时。当时项目需要将WGS-84坐标系的点云数据转换到地方坐标系,试了好几种方法都不理想,直到同事推荐了这个"七参数魔法"。简单来说…...

Shopee卖家必看:如何用爬虫自动监控竞品评价与价格(Python实战)

Shopee卖家必看:如何用Python爬虫实现竞品评价与价格智能监控 在东南亚电商市场激烈竞争的今天,Shopee卖家们面临着一个共同的挑战:如何快速响应市场变化,及时调整运营策略?传统的人工监控方式不仅效率低下&#xff0…...

Java JDBC 封装:从原生写法到工具类封装 + 增删改查

在 Java 操作数据库的过程中,原生 JDBC 代码存在大量重复逻辑:加载驱动、获取连接、释放资源…… 这些代码在每个业务中都要写一遍,不仅繁琐,还容易出错。 本文是个人的一些学习笔记,主要内容如下: 原生 …...

构建高效原神数据API:genshin.dev API完全指南

构建高效原神数据API:genshin.dev API完全指南 【免费下载链接】api A fan-made Genshin Impact API for easy access to game data. 项目地址: https://gitcode.com/gh_mirrors/api13/api 在游戏开发、数据分析、社区工具构建等场景中,获取准确、…...

量化分析第一步:手把手教你用Pandas清洗网易金融下载的股票CSV数据

量化分析第一步:手把手教你用Pandas清洗网易金融下载的股票CSV数据 刚拿到网易金融导出的股票CSV数据时,很多人会直接扔进分析工具——直到发现中文列名报错、日期格式混乱、停牌日数据缺失等问题才手忙脚乱。作为量化分析的真正起点,数据清洗…...

给HC-SR04超声波模块加个OLED显示屏:用STM32F103做个简易测距仪完整项目

用STM32F103打造智能超声波测距仪:从硬件搭建到UI设计全攻略 在创客圈里,超声波测距项目一直是最受欢迎的入门实践之一。它不仅涵盖了GPIO控制、定时器、中断等嵌入式开发核心知识点,还能快速做出看得见摸得着的成果。今天我们要做的不是简单…...

如何快速掌握GEMMA:基因组关联分析的完整指南与实战技巧

如何快速掌握GEMMA:基因组关联分析的完整指南与实战技巧 【免费下载链接】GEMMA Genome-wide Efficient Mixed Model Association 项目地址: https://gitcode.com/gh_mirrors/gem/GEMMA 如果你正在寻找一款能够高效处理基因组关联分析的软件,那么…...

用C#和ILSpy手把手教你分析一个基于硬件绑定的软件授权机制(附完整注册机源码)

深入解析C#软件授权机制与逆向工程实战 在当今数字化时代,软件授权机制作为保护知识产权的重要手段,其设计与实现一直是开发者关注的焦点。本文将带领读者深入探索一个典型的基于硬件绑定的软件授权系统,从原理分析到实战破解,全…...

12N65-ASEMI解锁功率电子新边界12N65

编辑:LL12N65-ASEMI解锁功率电子新边界12N65型号:12N65品牌:ASEMI沟道:NPN封装:TO-220F漏源电流:12A漏源电压:650VRDS(on):0.8Ω批号:最新引脚数量:3封装尺寸&#xff1a…...

还在用EF搞小项目?试试这个120k的Dapper,手把手教你从NuGet安装到增删改查

轻量级ORM王者Dapper实战:从NuGet安装到高效CRUD全解析 当你的项目规模还不足以动用Entity Framework这样的重型武器时,有没有一种既保留ORM便利性又保持极致轻量的解决方案?今天我们要深入探讨的Dapper,正是为这种场景量身定制的…...