Java网络编程入门

news/2024/9/17 2:28:50/ 标签: java, 网络, 开发语言

        在现代软件开发中,网络编程是一项不可或缺的技能。Java提供了强大的网络编程支持,使得开发者能够轻松地创建网络应用程序。今天将介绍Java中的网络编程基础,重点讲解Socket和ServerSocket类的使用。

什么是Socket?

        Socket是网络通信的基本组件,它为应用程序提供了一个与网络进行交互的接口。通过Socket,程序可以发送和接收数据,类似于文件操作的方式。Socket的工作原理可以简单概括为:

  1. 建立连接:客户端通过Socket连接到服务器。
  2. 数据传输:一旦连接建立,双方可以通过输入输出流进行数据的发送和接收。
  3. 关闭连接:通信完成后,Socket会被关闭以释放资源。

什么是ServerSocket?

        ServerSocket是专门用于服务器端的Socket,它负责监听客户端的连接请求。ServerSocket的主要功能包括:

  1. 监听端口:在指定的端口上等待客户端的连接请求。
  2. 接受连接:当有客户端请求连接时,ServerSocket会返回一个新的Socket对象,用于与该客户端进行通信。

Socket与ServerSocket的基本用法

1. 服务器端实现

下面是一个简单的服务器端代码示例,使用ServerSocket监听客户端连接并处理消息。

java">import java.io.*;
import java.net.*;public class SimpleServer {public static void main(String[] args) {// 创建ServerSocket,监听8888端口try (ServerSocket serverSocket = new ServerSocket(8888)) {System.out.println("服务器启动,等待客户端连接...");// 接受客户端连接Socket clientSocket = serverSocket.accept();System.out.println("客户端已连接:" + clientSocket.getInetAddress());// 创建输入流和输出流BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);// 读取客户端发送的消息String message = in.readLine();System.out.println("收到消息:" + message);// 向客户端发送回复out.println("服务器已收到消息:" + message);} catch (IOException e) {e.printStackTrace();}}
}

服务器端代码解析

  1. 创建ServerSocket:在try语句中创建ServerSocket对象,指定监听的端口(8888)。
  2. 等待客户端连接:调用accept()方法,服务器会阻塞,直到有客户端连接。
  3. 创建输入输出流:使用InputStreamOutputStream来接收和发送数据。
  4. 读取消息:通过BufferedReader读取客户端发送的消息。
  5. 发送回复:使用PrintWriter向客户端发送确认消息。

2. 客户端实现

下面是一个简单的客户端代码示例,连接到服务器并发送消息。

java">import java.io.*;
import java.net.*;public class SimpleClient {public static void main(String[] args) {// 创建Socket,连接到服务器的8888端口try (Socket socket = new Socket("127.0.0.1", 8888)) {// 创建输入流和输出流PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 向服务器发送消息out.println("Hello, Server!");// 读取服务器的回复String response = in.readLine();System.out.println("服务器回复:" + response);} catch (IOException e) {e.printStackTrace();}}
}

 

客户端代码解析

  1. 创建Socket:指定服务器的IP地址和端口号(8888),建立连接。
  2. 创建输入输出流:同样使用InputStreamOutputStream来处理数据。
  3. 发送消息:向服务器发送一条消息。
  4. 接收回复:读取服务器的回复并打印到控制台。

运行示例

  1. 启动服务器:首先运行SimpleServer类,服务器会在控制台输出“服务器启动,等待客户端连接...”。
  2. 启动客户端:然后运行SimpleClient类,客户端会连接到服务器并发送消息。
  3. 查看输出:在服务器控制台上,你会看到客户端的IP地址和发送的消息;在客户端控制台上,你会看到服务器的回复。

总结

        Java的网络编程通过Socket和ServerSocket类提供了强大的功能,使得开发者能够轻松实现网络通信。本文通过简单的示例展示了如何创建一个基本的客户端和服务器,帮助你入门Java网络编程。随着对网络编程的深入理解,你可以实现更复杂的网络应用,如聊天室、文件传输等。希望这篇文章对你有所帮助。

 


http://www.ppmy.cn/news/1522501.html

相关文章

android系统源码12 修改默认桌面壁纸--SRO方式

1、aosp12修改默认桌面壁纸 代码路径 :frameworks\base\core\res\res\drawable-nodpi 替换成自己的图片即可,不过需要覆盖所有目录下的图片。 由于是静态修改,则需要make一下,重新编译。 2、方法二Overlay方式 由于上述方法有…

[动态规划] 删除并获得点数

给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 开始你拥有 0 个点数。返回你能通过这些操…

vue3缺陷

Vue 3 的一些缺陷包括: 1. 兼容性问题:由于 Vue 3 使用了新的响应式系统,与 Vue 2 的代码不兼容。这意味着在迁移现有项目时需要进行一些改动。 2. 学习曲线:Vue 3 引入了一些新的概念和 API,相对于 Vue 2 有一定的学习…

如何利用AI优化知识中台的用户体验

引言 在数字化时代,知识中台作为企业知识管理与服务的重要载体,其用户体验的优劣直接关乎到信息的有效传递、员工的学习效率及企业的整体创新能力。随着人工智能(AI)技术的飞速发展,将AI融入知识中台的设计与优化中&a…

Linux系统高效进程控制的实战技巧

Linux系统高效进程控制的实战技巧 Linux是一种开源的Unix-like操作系统内核,由林纳斯托瓦兹(Linus Torvalds)于1991年首次发布。Linux以其稳定性、安全性和灵活性而著称,广泛应用于服务器、桌面、嵌入式系统等多个领域。在Linux系…

使用Docker快速安装和运行Elasticsearch

Elasticsearch 是一个基于 Lucene 构建的开源搜索引擎,它提供了分布式、多租户能力的全文搜索引擎,具有 HTTP web 接口和无模式的 JSON 文档。在本文中,我们将介绍如何使用 Docker 快速安装和运行 Elasticsearch。 为什么使用 Docker 安装 E…

redis中使用lua脚本

1、现实问题 1.redis采用单线程架构,可以保证单个命令的原子性,但是无法保证一组命令在高并发场景下的原子性。例如: 在串行场景下:A和B的值肯定都是3在并发场景下:A和B的值可能在0-6之间。 2.极限情况下1&#xff1…

Qt Widget核心属性

文章目录 前言enabledgeometrywindowTitlewindowIconwindowOpacitycursorfonttoolTipfocusPolicystyleSheet 前言 Qt中的各种控件,都是继承自QWidget类,了解这个类的属性方法之后,后续的控件也通用 enabled enabled描述了一个控件是否处于…

文件包含PHP伪协议利用方法

1.file://协议 使⽤: file:// ⽂件的绝对路径和⽂件名 2.php?cmdfile://D:\phpstudy_pro\WWW\123.txt 2.php://filter协议 ⽤途:常⽤于读取⽂件 / 源码 2.php?cmdphp://filter/readconvert.base64-encode/resource1.php 3.php://input协议 步骤一&…

【C++拓展(一)】后端开发常用的技术栈

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 C拓展 1. 前言2. 语言层面3. 设计模式层面4. 开…

「Qt Widget中文示例指南」如何实现一个系统托盘图标?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 System Tray Icon&a…

基础学习之——Apache Spark

Apache Spark是一种开源的大数据处理框架,它提供了快速、通用和可扩展的大数据分析和处理功能。Spark可以在大规模数据集上进行高速计算,并且可以与多种数据源和工具进行集成。 Spark的基本概念包括: 弹性分布式数据集(Resilient…

【LeetCode 121】买卖股票的最佳时机

1. 题目 2. 分析 如果当前的价格比之前买入的价格要低,那么我们就“逢低买入”,更新买入的价格,因为在此后的每一天里,当前的价格与之前的买入价格相比是更优解。 如果读者对单调队列有接触,可以看到这一步的核心思想…

iOS P8证书推送测试

最近在配合服务端人员调试相关的 APNS auth key 推送的问题,相比于苹果的P12证书的推送,P8证书的推送显得方便很多,P8的优势在于简单,安全 容易生成 最重要的是不会过期。 现在我们来看下测试具体流程: 方法一 地址…

掌握Hive函数[1]:从基础到高级应用

目录 函数简介 单行函数 算术运算函数 数值函数 字符串函数 日期函数 流程控制函数 集合函数 案例演示 函数简介 Hive将常用的逻辑封装成函数供用户使用,类似于Java中的函数。这样做的好处是可以避免用户反复编写相同的逻辑代码,可以直接调用这些函数。…

2024 RustChinaConf 赞助商介绍

2024 RustChinaConf 得到了行业各界的广泛支持,在此向以下赞助商表示感谢! 非凸科技 非凸科技是一家全栈使用Rust的金融科技公司,致力于为券商、私募、公募等金融机构及个人投资者提供一站式数智交易领域服务解决方案。作为本次大会的钻石赞助…

jmeter之ForEach控制器使用

ForEach控制器作用: 一般和用户自定义变量或者正则表达式提取器配合使用,读取返回结果中一系列相关的变量值,该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值(类似python当中的for语句,用来遍历操作) 本节代码已上…

币安/欧易合约对冲APP系统开发

币安合约对冲系统开发是一个复杂且专业的过程,它涉及到多个方面的技术和策略。以下是对币安合约对冲系统开发的一个概述: 一、系统概述 币安合约对冲系统是一种利用币安交易所提供的合约交易功能,通过同时建立多头和空头仓位来减少或消除市…

hutool 集合相关交集、差集

开发过程中会遇到集合之间的对比之类的需求&#xff0c;之前经常会自己写个工具类来实现&#xff0c;目前hutool可以帮助我们解决很多问题&#xff0c;接下来我们就来实践下。 相关jar包 <dependency><groupId>cn.hutool</groupId><artifactId>hutool…

Python办公自动化案例

文章目录 系列文章办公自动化案例案例1&#xff1a;批量重命名文件案例2&#xff1a;Excel数据自动筛选案例3&#xff1a;PDF文件合并案例4&#xff1a;批量发送电子邮件案例5&#xff1a;日程安排提醒案例6&#xff1a;CSV文件数据统计案例7&#xff1a;Word文档生成案例8&…