Java网络编程基础详解

下面是关于“Java网络编程基础详解”的完整攻略。

Java网络编程基础详解

什么是网络编程

网络编程是指使用计算机网络进行信息传输的一种编程方法。在网络编程中,程序可以通过网络连接与其他远程主机上的程序交换数据。通过网络编程可以实现远程控制、异地协同开发等功能。

常用的网络编程协议

TCP/IP协议

TCP/IP是传输控制协议/因特网协议的缩写,是目前互联网所使用的协议。它包含两个部分:传输控制协议(TCP)和互联网协议(IP)。它们共同工作,使得数据能够在网络中正确地传输。

UDP协议

用户数据报协议(UDP)是一种报文传输协议,它没有建立连接,仅将数据报报文发送给收件人。因此,UDP具有较高的传输速度和较低的网络开销,但也存在一定的数据包丢失和传输错误的风险。

Java的网络编程实现

Java的网络编程实现主要依赖于Java提供的 java.net 包。该包提供了各种各样的Java类,以实现网络编程所需的各种通信协议。其中,主要的类和接口包括:

  • Socket:用于客户端与服务器之间的通信
  • ServerSocket:用于服务器端监听并接受客户端连接请求
  • DatagramPacket:UDP协议所使用的数据报文类
  • DatagramSocket:UDP协议所使用的数据报文的发送和接收类

下面,我们将具体介绍Socket和ServerSocket的使用方法。

Socket的使用

Socket是Java网络编程中比较常用的类,它用于在客户端与服务端之间建立网络连接,并进行数据传输。以下是创建Socket的基本步骤:

  1. 创建一个Socket对象,并指定连接服务器的IP地址和端口号。
Socket socket = new Socket("127.0.0.1", 8888);
  1. 通过输入输出流进行数据传输。
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
  1. 通过输入输出流进行数据传输。
outputStream.write("Hello World".getBytes());
byte[] bytes = new byte[1024];
inputStream.read(bytes);
System.out.println(new String(bytes));
  1. 关闭Socket连接。
socket.close();

ServerSocket的使用

ServerSocket是用于在服务器端监听并接受客户端连接请求的类。以下是创建ServerSocket的基本步骤:

  1. 创建一个ServerSocket对象,并指定监听的端口号。
ServerSocket serverSocket = new ServerSocket(8888);
  1. 等待客户端连接请求,并返回一个对应的Socket对象。
Socket socket = serverSocket.accept();
  1. 通过输入输出流进行数据传输。
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
  1. 通过输入输出流进行数据传输。
byte[] bytes = new byte[1024];
inputStream.read(bytes);
System.out.println(new String(bytes));
outputStream.write("Hello World".getBytes());
  1. 关闭Socket连接和ServerSocket监听。
socket.close();
serverSocket.close();

示例

示例1:基于TCP协议的Echo服务器

这是一个基于TCP协议的Echo服务器示例,它会将客户端发送的消息原封不动地返回客户端。

import java.io.*;
import java.net.*;

public class TCPServer {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("Server started.");

            while (true) {
                Socket socket = serverSocket.accept();
                System.out.println("Client " + socket.getInetAddress().getHostAddress() + " connected.");

                DataInputStream dis = new DataInputStream(socket.getInputStream());
                DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

                String message = dis.readUTF();
                System.out.println("Message from client: " + message);

                dos.writeUTF(message);
                dos.flush();

                socket.close();
                System.out.println("Connection closed.");
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
import java.io.*;
import java.net.*;

public class TCPClient {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("127.0.0.1", 8888);
            System.out.println("Connected to server.");

            DataInputStream dis = new DataInputStream(socket.getInputStream());
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

            String message = "Hello World";
            dos.writeUTF(message);
            dos.flush();
            System.out.println("Sent message to server: " + message);

            String response = dis.readUTF();
            System.out.println("Received response from server: " + response);

            socket.close();
            System.out.println("Connection closed.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

示例2:基于UDP协议的Echo服务器

这是一个基于UDP协议的Echo服务器示例,它会将客户端发送的消息原封不动地返回客户端。

import java.net.*;

public class UDPServer {
    public static void main(String[] args) {
        try {
            DatagramSocket socket = new DatagramSocket(8888);
            System.out.println("Server started.");

            while (true) {
                byte[] buf = new byte[1024];
                DatagramPacket packet = new DatagramPacket(buf, buf.length);
                socket.receive(packet);
                System.out.println("Message from client: " + new String(packet.getData()));

                InetAddress address = packet.getAddress();
                int port = packet.getPort();
                packet = new DatagramPacket(buf, buf.length, address, port);

                socket.send(packet);
                System.out.println("Sent message to client: " + new String(packet.getData()));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
import java.net.*;

public class UDPClient {
    public static void main(String[] args) {
        try {
            DatagramSocket socket = new DatagramSocket();
            System.out.println("Connected to server.");

            InetAddress address = InetAddress.getByName("127.0.0.1");
            byte[] buf = "Hello World".getBytes();
            DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 8888);

            socket.send(packet);
            System.out.println("Sent message to server: " + new String(packet.getData()));

            buf = new byte[1024];
            packet = new DatagramPacket(buf, buf.length);
            socket.receive(packet);
            System.out.println("Received response from server: " + new String(packet.getData()));

            socket.close();
            System.out.println("Connection closed.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上是关于“Java网络编程基础详解”的完整攻略和两个示例。希望对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java网络编程基础详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Windows下java、javaw、javaws以及jvm.dll等进程的区别

    介绍:在Windows操作系统中,java、javaw、javaws等进程都是跑Java程序或应用的进程,它们在功能上有所差异。本文将详细讲解它们的区别。 javaw javaw.exe是Java虚拟机的一个非常重要的进程,并且是后台进程,即不会在显示屏上出现一个命令行窗口。它适用于那些需要长时间运行在后台的Java应用程序。大多数GUI应用程序都是使用ja…

    Java 2023年5月23日
    00
  • Java进阶:Struts多模块的技巧

    Java进阶: Struts多模块的技巧 简介 在今天的互联网中,Web 应用开发已经成为技术人员的必备技能。Struts 多模块则是其中的一个重要技能。本文将详细讲述如何在 Struts 中使用多模块,并提供两个示例供读者参考。 概述 Struts 是一个基于 MVC 模式,面向 Web 开发的框架。在使用 Struts 进行 Web 应用开发时,我们通常…

    Java 2023年5月20日
    00
  • Java13 明天发布(最新最全新特性解读)

    Java13 发布攻略 Java13 于 2019年9月17日发布,在这篇文档中,我们将介绍 Java13 的最新特性。 1. 新特性 以下是 Java13 中的一些新特性: 1.1 Switch 表达式 Java 13 可以使用新的关键字 yield 或 -> 来作为 switch 表达式的返回值。这使得代码更加简洁。 下面是一个例子: public…

    Java 2023年5月19日
    00
  • 图书管理系统java版

    “图书管理系统java版”完整攻略 1. 简介 “图书管理系统java版”是一个用Java语言开发的图书管理系统,旨在提供一个方便管理图书信息的工具,可实现添加、删除、修改、查询等功能。 2. 环境搭建 在开始使用“图书管理系统java版”之前,需要先搭建Java环境和数据库环境。具体步骤如下: 下载安装Java开发工具包(JDK),建议使用最新版本。 下载…

    Java 2023年5月20日
    00
  • Spring Boot缓存实战之Redis 设置有效时间和自动刷新缓存功能(时间支持在配置文件中配置)

    Spring Boot缓存实战之Redis 设置有效时间和自动刷新缓存功能 在Spring Boot应用程序中使用缓存可以提高应用程序的性能和可扩展性。在缓存的过期时间到达时,应用程序将重新获取数据,并创建一个新的缓存项。在本文中,我们将探讨如何在Spring Boot应用程序中使用Redis来缓存数据,以及如何设置有效时间和自动刷新缓存功能。 设置依赖 首…

    Java 2023年5月31日
    00
  • 相册管理系统(Java表单+xml数据库存储)

    相册管理系统(Java表单+xml数据库存储)是一个使用Java开发的Web应用程序,可以让用户上传和查看图像,并能够对这些图像进行管理。该系统使用了Java表单和xml数据库存储进行数据交互和管理。下面是该系统的完整攻略。 前提条件 在开始使用相册管理系统之前,您需要确保您已经满足以下要求: 电脑已经安装了Java开发环境和Tomcat服务器 您已经掌握了…

    Java 2023年5月20日
    00
  • 详解SpringBoot+Thymeleaf 基于HTML5的现代模板引擎

    Sure,下面我会详细讲解“详解SpringBoot+Thymeleaf 基于HTML5的现代模板引擎”的完整攻略。 简介 Thymeleaf 是一个用于 Web 与独立环境的现代服务器端 Java 模板引擎。Thymeleaf 的主要目标是提供一种优雅和高度可维护的创建 XHTML / HTML5 的模板的方式;同时也可以非常轻松地拓展为JSP等模板引擎,…

    Java 2023年6月15日
    00
  • Maven 修改tomcat运行版本和端口的实现方法

    以下是“Maven 修改 Tomcat 运行版本和端口的实现方法”的攻略。 介绍 Maven是一个Java项目管理工具,可以自动化构建,依赖管理,以及项目信息管理。它的一个重要作用就是可以将项目打包成一个可以部署的War包。而Tomcat是一个Java Web应用程序服务器,可以运行打包好的War包。 在Maven的项目中,我们可以使用插件来管理Tomcat…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部