java 网络编程 详解

news/2024/12/5 1:12:20/

Java 网络编程主要涉及使用 Java 中的套接字(Sockets)和服务器套接字(ServerSockets)来实现网络通信。这种方式可以使不同主机上运行的应用程序之间进行数据交换。以下是 Java 网络编程的几个关键概念和组件的详解:

1. 套接字编程(Socket Programming)

套接字(Socket)

套接字是两台机器之间通信的端点。在 Java 中,java.net.Socket 类代表客户端套接字,用于建立连接并与服务端交换数据。

服务器套接字(ServerSocket)

java.net.ServerSocket 类在服务端监听来自客户端的连接请求。它主要用于创建服务端套接字,等待并接受客户端的连接。

基本步骤

  1. 服务端创建 ServerSocket:服务端启动并在指定端口上监听客户端的连接请求。

    java">ServerSocket serverSocket = new ServerSocket(8080);
    
  2. 客户端创建 Socket 连接到服务端:客户端通过指定服务器的 IP 地址和端口号创建 Socket,以建立连接。

    java">Socket socket = new Socket("127.0.0.1", 8080);
    
  3. 通信:一旦连接建立,客户端和服务器就可以通过输入和输出流进行通信。

    java">// 服务端接受客户端连接
    Socket clientSocket = serverSocket.accept();// 获取输入流和输出流
    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);// 读取数据
    String inputLine;
    while ((inputLine = in.readLine()) != null) {System.out.println("Received: " + inputLine);out.println(inputLine); // 回传数据
    }
    
  4. 关闭连接:通信完成后,双方需要关闭连接。

    java">socket.close();
    serverSocket.close();
    

UDP 通信

除了基于 TCP 的套接字,Java 还支持 UDP 协议,这是另一种不需要建立连接的通信方式,通常用于不需要严格数据完整性的场合。

DatagramSocket 和 DatagramPacket

UDP 通信通过 java.net.DatagramSocketjava.net.DatagramPacket 来实现。

  • DatagramSocket:用于发送或接收数据包的套接字。
  • DatagramPacket:包含数据的数据包。
java">// 创建 DatagramSocket
DatagramSocket socket = new DatagramSocket();// 发送数据
byte[] buf = new byte[256];
InetAddress address = InetAddress.getByName("127.0.0.1");
DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 8080);
socket.send(packet);// 接收数据
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);

网络 I/O 模型

Java 还支持非阻塞的网络 I/O,即 NIO(New Input/Output),它提供了与传统阻塞 I/O 不同的方式来处理网络通信。

  • Channels:相当于流的 NIO 版本,可以异步读写。
  • Buffers:数据容器,NIO 通过 Buffer 来进行数据处理。
  • Selectors:允许单线程处理多个 Channel,可以检测一个或多个 NIO 通道,并确定哪些通道已准备好进行读取或写入。

这些工具和模型为复杂的网络通信提供了高效和可扩展的解决方案。通过使用这些技术,开发人员可以构建高效、可扩展且响应迅速的网络应用程序。


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

相关文章

黑马2024AI+JavaWeb开发入门Day02-JS-VUE飞书作业

视频地址&#xff1a;哔哩哔哩 讲义作业飞书地址&#xff1a;飞书 一、作业1 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…

AI生成的一个.netcore 经典后端架构

下面是一个完整的 .NET Core 后端项目示例&#xff0c;使用 Dapper 作为轻量级 ORM 访问 Oracle 数据库&#xff0c;并实现高性能架构。我们将实现学生表、课程表、成绩表和班级表的基本增删改查功能&#xff0c;以及查询某个班级学生成绩的功能&#xff0c;并使用自定义缓存来…

ORB-SLAM2 ----- LocalMapping::ComputeF12和ORBmatcher::CheckDistEpipolarLine

文章目录 一、函数意义二、LocalMapping::ComputeF12()1.函数讲解2.函数代码 三、ORBmatcher::CheckDistEpipolarLine()1.函数讲解2.函数代码 四、总结 一、函数意义 这两个函数在LocalMapping::CreateNewMapPoints()被调用&#xff0c;之所以单独拿出来讲&#xff0c;是因为这…

【WEB开发.js】HTTP请求和相应报文的头字段:Content-Type (巨巨巨巨详细好懂的举例详解)

Content-Type 是 HTTP 请求和响应报文中的头字段之一&#xff0c;用于指定发送的数据类型&#xff08;MIME 类型&#xff09;。它告诉服务器或客户端数据的格式&#xff0c;方便接收方正确解析和处理内容。 例如&#xff0c;在发送 JSON 数据时&#xff0c;会指定 Content-Typ…

[RabbitMQ] 延迟队列+事务+消息分发

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

无人机主控芯片技术与算法详解!

一、无人机主控芯片核心技术 高性能CPU&#xff1a; 无人机需要高性能的CPU来处理复杂的飞行控制算法、图像处理和数据传输等任务。目前&#xff0c;无人机的CPU主要有大疆自研的飞控系统、高通提供的无人机设计平台Snapdragon Flight&#xff0c;以及基于开源平台APM、Px4等…

HCIA笔记6--路由基础与静态路由:浮动路由、缺省路由、迭代查找

文章目录 0. 概念1.路由器工作原理2. 跨网访问流程3. 静态路由配置4. 静态路由的应用场景4.1 路由备份4.2 浮动路由4.3 缺省路由 5. 迭代路由6 问题6.1 为什么路由表中有的下一跳的地址有接口&#xff1f;6.2 个人电脑的网关本质是什么&#xff1f; 0. 概念 自治系统&#xff…

故障诊断 | Transformer-LSTM组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | Transformer-LSTM组合模型的故障诊断(Matlab) 源码设计 %% 初始化 clear close all clc disp(此程序务必用2023b及其以上版本的MATLAB!否则会报错!) warning off %