【Java基础】 网络编程

简介: Java网络编程,URL编程,Socket编程,InetAddress程序设计

在数字化时代,网络编程已成为软件开发中的重要组成部分。无论是构建分布式系统、实现实时通讯还是进行Web开发,都需要深入了解网络编程的基础知识和技术。这种技能不仅在IT领域至关重要,还在非计算机行业的岗位中发挥着越来越重要的作用。Java网络编程是指用Java语言编写的在多个设备之间通过网络进行通信的程序。网络编程的核心在于实现不同计算机之间的数据交换,而Java为此提供了丰富的类库和接口。


一般情况下,在进行网络编程之前,应该掌握与网络有关的知识,甚至对细节也非常熟悉。例如网络通信协议、网络参考模型等。本文只介绍Java网络编程的相关概念,有关网络知识的内容请参看其他资料。

一、 网络编程的概念

网络编程是指编写程序使互联网中的两个或多个设备之间进行数据传输与通信。它主要涉及网络设备的行为和流量控制,通常由独立于网络硬件运行的软件处理。网络编程将网络的控制平面与数据平面分离,从而提高了网络的可编程性和灵活性。

网络编程的基本概念包括客户端和服务器、请求和响应以及Socket套接字等。客户端是主动发起通信的一方,而服务器则是被动接受连接并提供服务。在基于TCP/IP协议的网络通信中,Socket套接字作为基本的操作单元起着关键作用。网络编程中的传输层主要使用两种协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供的是面向连接、可靠的传输,适用于需要保证数据完整性和顺序的应用场景;而UDP则提供无连接、不可靠的传输,适用于对实时性要求高但可以容忍部分数据丢失的场景。


Java语言的网络编程

Java语言的网络编程分为三个层次:

  1. 最高一级的网络通信就是从网络上下载小程序。客户端浏览器通过HTML文件中的 <applet> 标记来识别小程序,并解析小程序的属性,通过网络获取小程序的字节码文件。
  2. 次一级的通信,就是通过URL类的对象指明文件所在位置,并从网络上下载图像、音频和视频文件等 ,然后对图像显示、对音频和视频进行播放。
  3. 最低一级的通信是利用 java.net 包中提供的类直接在程序中实现网络通信。


针对不同层次的网络通信,Java语言提供的网络功能有四大类:URL、InetAddressSocket 和 Datagram。

URL

面向应用层,通过URL,Java程序可以直接输出或读取网络上的数据。

InetAddress

面向的是IP层,用于标识网络上的硬件资源。

Socket Datagram

面向的是传输层。Socket使用TCP协议,这是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道进行通信;Datagram 则使用UDP协议,是另一种网络传输方式,它把数据的目的地址记录在数据包中,然后直接放在网络上。


Java语言网络编程中主要使用的 java.net 包中的类包括

面向 IP 层的类  ————  InetAddress

面向应用层的类  ————  URLURLConnection

TCP协议相关类  ————  SocketServerSocket

UDP协议相关类  ————  DatagramPacketDatagramSocketMulticastSocket

二、URL编程

Java 语言的  java.net.URL 类和 java.net.URLConnection 类使编程人员能很方便地利用URL在Internet上进行网络通信。

1、创建URL对象

Java语言利用URL类来访问网络上的资源,URL类是 java.lang.Object 类的直接子类

2、URL的常用方法

方法 功能说明
public boolean equals(Object obj) 判断两个URL是否相同
public final Object getContent() 获取 URL连接的内容
public String getProtocol() 返回URL对象的协议名称
public String getHost() 返回URL对象访问的计算机名称
public int getPort() 返回URL对象访问的端口号
public String getFile() 返回URL指向的文件名
public String getPath() 返回URL对象所使用的文件路径
public String getRef( ) 返回URL对象的引用字符串,即获取参考点
public URLConnection openConnection( ) 打开URL指向的连接
public final InputStream openStream( ) 打开输人流
public String toString() 返回整个 URL字符串


3.代码示例:使用URL类访问网络资源

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class URLExample {
    public static void main(String[] args) {
        try {
            // 创建URL对象
            URL url = new URL("https://www.example.com");
            // 打开连接并获取输入流
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            // 读取网页内容并输出
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            // 关闭输入流
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

image.gif

上述代码中,我们首先创建了一个URL对象,指定要访问的网址为"https://www.example.com"。然后,通过调用url.openStream()方法打开与该URL的连接,并获取输入流。接下来,我们使用BufferedReaderInputStreamReader来逐行读取网页的内容,并将其输出到控制台。最后,记得关闭输入流以释放资源

三、Socket编程

Socket(套接字)是网络通信中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。Socket编程的主要目的是实现不同计算机之间的有效通信。

在Java中,可以使用 java.net 包中的 Socket 类和 ServerSocket 类来实现Socket编程。Socket类表示客户端套接字,用于与服务器建立连接并发送/接收数据;ServerSocket类表示服务器端套接字,用于监听客户端连接请求并创建相应的Socket对象。

以下是一个简单的Java Socket编程示例

1.创建一个服务器端程序,监听指定端口,等待客户端连接:

import java.io.*;
import java.net.*;
public class Server {
    public static void main(String[] args) {
        try {
            // 创建一个ServerSocket对象,监听8080端口
            ServerSocket serverSocket = new ServerSocket(8080);
            System.out.println("服务器已启动,等待客户端连接...");
            // 调用accept()方法,等待客户端连接
            Socket socket = serverSocket.accept();
            System.out.println("客户端已连接,IP地址:" + socket.getInetAddress().getHostAddress());
            // 关闭ServerSocket
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

image.gif

2. 创建一个客户端程序。连接到服务器并发送数据

import java.io.*;
import java.net.*;
public class Client {
    public static void main(String[] args) {
        try {
            // 创建一个Socket对象,连接到服务器
            Socket socket = new Socket("localhost", 8080);
            System.out.println("已连接到服务器");
            // 获取输出流,向服务器发送数据
            OutputStream outputStream = socket.getOutputStream();
            PrintWriter printWriter = new PrintWriter(outputStream);
            printWriter.write("Hello, Server!");
            printWriter.flush();
            // 关闭Socket
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

image.gif

四、HTTP客户端

HTTP客户端在Java网络编程中起着至关重要的作用,它允许开发者以编程方式与Web服务器进行交互,获取数据或执行其他Web服务操作。Java提供了 HttpURLConnection 类,用于实现HTTP客户端的编程。

以下是一个简单的例子,展示如何使用Java标准库中的 HttpURLConnection 实现HTTP GET请求:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpClientExample {
    public static void main(String[] args) throws Exception {
        // 创建URL对象
        URL url = new URL("http://example.com");
        // 打开连接
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        // 设置请求方法为GET
        connection.setRequestMethod("GET");
        // 获取响应码
        int responseCode = connection.getResponseCode();
        System.out.println("响应码: " + responseCode);
        // 读取响应内容
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String line;
        StringBuilder response = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            response.append(line);
        }
        reader.close();
        // 输出响应内容
        System.out.println(response.toString());
        // 关闭连接
        connection.disconnect();
    }
}

image.gif

五、InetAddress 程序设计

InetAddress是Java网络编程中的一个类,用于表示互联网协议(IP)地址。它提供了一些方法来获取和操作IP地址。以下是一个简单的示例,展示了如何使用InetAddress类:

import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetAddressExample {
    public static void main(String[] args) {
        try {
            // 获取本地主机的InetAddress对象
            InetAddress localHost = InetAddress.getLocalHost();
            System.out.println("本地主机名: " + localHost.getHostName());
            System.out.println("本地IP地址: " + localHost.getHostAddress());
            // 根据主机名获取InetAddress对象
            InetAddress googleHost = InetAddress.getByName("www.google.com");
            System.out.println("Google主机名: " + googleHost.getHostName());
            System.out.println("Google IP地址: " + googleHost.getHostAddress());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

image.gif


以上是对Java网络编程概念以及常用方法的介绍!

希望本文对你理解和应用Java网络编程有所帮助!

目录
相关文章
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
444 11
|
7月前
|
JSON 移动开发 网络协议
Java网络编程:Socket通信与HTTP客户端
本文全面讲解Java网络编程,涵盖TCP与UDP协议区别、Socket编程、HTTP客户端开发及实战案例,助你掌握实时通信、文件传输、聊天应用等场景,附性能优化与面试高频问题解析。
|
5月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
276 1
|
5月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
295 1
|
5月前
|
机器学习/深度学习 分布式计算 Java
Java与图神经网络:构建企业级知识图谱与智能推理系统
图神经网络(GNN)作为处理非欧几里得数据的前沿技术,正成为企业知识管理和智能推理的核心引擎。本文深入探讨如何在Java生态中构建基于GNN的知识图谱系统,涵盖从图数据建模、GNN模型集成、分布式图计算到实时推理的全流程。通过具体的代码实现和架构设计,展示如何将先进的图神经网络技术融入传统Java企业应用,为构建下一代智能决策系统提供完整解决方案。
526 0
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
303 9
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
530 23
|
安全 网络协议 Java
Java网络编程封装
Java网络编程封装原理旨在隐藏底层通信细节,提供简洁、安全的高层接口。通过简化开发、提高安全性和增强可维护性,封装使开发者能更高效地进行网络应用开发。常见的封装层次包括套接字层(如Socket和ServerSocket类),以及更高层次的HTTP请求封装(如RestTemplate)。示例代码展示了如何使用RestTemplate简化HTTP请求的发送与处理,确保代码清晰易维护。
|
缓存 网络协议 Java
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
443 0
|
网络协议 Java 物联网
Java网络编程知识点
Java网络编程知识点
222 13

热门文章

最新文章