Java网络编程基础详解

yizhihongxing

下面是关于“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日

相关文章

  • Java多线程模拟电影售票过程

    关于Java多线程模拟电影售票过程的攻略,可以分为以下几个步骤: 确定需求 在开始实现之前,需要首先明确需求。在本例中,我们需要模拟一个电影院售票过程。具体而言,要求程序能够模拟多个售票窗口同时对外售票,每个售票窗口需要从已有的电影票中售出一张票。当电影票售罄时,所有售票窗口需要停止售票。最后,统计每个售票窗口售出的票数以及总票数。 实现思路 在明确需求之后…

    Java 2023年5月26日
    00
  • jsp中存取session值简单介绍

    下面我将详细讲解“JSP中存取session值简单介绍”的完整攻略。 什么是Session Session是指服务端保存用户信息的一种机制,它可以用来保存用户登录信息、用户偏好设置、购物车、验证码等应用场景。 在JSP中,通过内置的session对象来存储用户信息,这个对象可以在同一浏览器窗口内的多个请求间共享,在用户关闭浏览器窗口时就会失效。 Sessio…

    Java 2023年6月15日
    00
  • SpringBoot框架集成token实现登录校验功能

    下面是详细讲解SpringBoot框架集成token实现登录校验功能的完整攻略。 一、什么是Token 在Web开发中,服务端不能直接拿到客户端的登录状态,而客户端又需要传递一些数据,这时就需要一种机制来帮助服务端识别客户端的身份,这种机制就是Token。 Token是一种令牌,本质上就是一个字符串,客户端在登录时通过身份验证后,服务端会返回给客户端一个To…

    Java 2023年5月19日
    00
  • js实现本地持久化存储登录注册

    下面是详细讲解“js实现本地持久化存储登录注册”的完整攻略。 什么是本地持久化存储 本地持久化存储指的是在用户本地计算机上保存数据,这样用户下一次可以重新访问网站时从本地读取数据,而不是每次重新从服务器上拉取数据,从而提高了网站的性能和用户体验。 实现本地持久化存储的方式 可以使用浏览器提供的Web Storage API或者使用第三方库,如:localfo…

    Java 2023年6月15日
    00
  • JAVA/JSP学习系列之二(Tomcat安装)

    JAVA/JSP学习系列之二(Tomcat安装) 概述 本文将介绍如何安装Tomcat服务器。Tomcat是一种开放源代码软件,它实现了Java Server Pages和Java Servlet技术,用来提供Java Web应用服务。Tomcat服务器是一个轻量级的应用服务器,可以运行在多个操作系统平台上。 环境要求 Java Development Ki…

    Java 2023年6月15日
    00
  • springboot使用外置tomcat启动方式

    下面是关于“springboot使用外置tomcat启动方式”的完整攻略。 1. 准备工作 在开始使用外置tomcat启动SpringBoot应用之前,需要先进行一些准备工作。 1.1 确认Tomcat版本 确保Tomcat版本符合SpringBoot版本要求。可以通过SpringBoot官方文档中的 Supported Application Server…

    Java 2023年5月19日
    00
  • 什么是Java持久化?

    Java持久化是指将数据从内存中持久化保存到磁盘文件或者数据库中。它是Java应用程序中一个核心的概念之一,因为在应用程序中处理数据的时候,通常需要将其保存或者读取,而持久化技术就为我们实现这一功能提供了便利。在Java中,通常使用以下几种持久化技术。 文件持久化 通过文件持久化技术,我们可以将程序中的对象数据以文件的形式保存到磁盘上,以便程序启动时,可以直…

    Java 2023年5月11日
    00
  • SpringBoot DataSource数据源实现自动配置流程详解

    下面就给你讲解一下“SpringBoot DataSource数据源实现自动配置流程详解”的完整攻略。 一、DataSource数据源实现自动配置概述 在我们开发一个项目时,需要我们配置数据源,SpringBoot提供了自动配置数据源的功能。SpringBoot对JDBC的封装使得开发人员能够快速地进行数据源配置,通过少量的配置就可以连接到数据库。 二、Da…

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