Java之网络编程案例讲解

Java之网络编程案例讲解

网络编程概述

网络编程是指编写程序使计算机之间实现通信的过程。在网络编程中通信是指通过套接字Socket在两台计算机之间进行的。Socket 是应用层与TCP/IP协议族通信的通信端点,也是TCP/IP协议族中最重要定位方式之一。

Java网络编程

Java网络编程中能用来实现网络通信的类实在是太多了,这里我只列举几个常用的。

  • java.net.Socket: 套接字,是网络通信中的基本操作单元。
  • java.net.ServerSocket: 服务器套接字,用来监听来自客户端的请求。
  • java.net.URL: 统一资源定位符,它表示Internet上某一资源的地址,协议可以是HTTP、FTP、TELNET等。
  • java.net.DatagramSocket: 使用UDP协议的套接字实现数据报式数据的发送和接收。
  • java.net.MulticastSocket: 使用UDP协议的数据报套接字,可以将数据报发送到一个组中的所有的客户端上。
  • java.net.InetAddress: Java用它来代表IP地址。

Java网络编程案例

1. 简单的客户端和服务端通信

客户端连接服务端,服务端接收到客户端发送的消息并回复消息给客户端。

服务端代码:

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(8888);
        System.out.println("服务端已启动,等待客户端连接...");
        Socket socket = server.accept();
        System.out.println("客户端已连接");
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String message = in.readLine();
        System.out.println("接收到客户端的消息:" + message);

        PrintWriter out = new PrintWriter(socket.getOutputStream());
        System.out.println("发送消息给客户端:Hello Client!");
        out.print("Hello Client!");
        out.flush();

        socket.close();
        server.close();
    }
}

客户端代码:

public class Client {
    public static void main(String[] args) throws IOException {
        String host = "localhost";
        int port = 8888;
        Socket socket = new Socket(host, port);
        PrintWriter out = new PrintWriter(socket.getOutputStream());
        System.out.println("发送消息给服务端:Hello Server!");
        out.print("Hello Server!");
        out.flush();

        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String message = in.readLine();
        System.out.println("接收到服务端的消息:" + message);

        socket.close();
    }
}

2. 简单的Web服务器

实现一个简单的Web服务器,当用户请求时,可以返回一个HTML页面给客户端。

public class SimpleWebServer {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(8888);
        System.out.println("Web服务器已启动,等待客户端请求...");
        while (true) {
            Socket clientSocket = server.accept();
            System.out.println("客户端请求: " + clientSocket);

            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            String line = in.readLine();
            while (!line.isEmpty()) {
                System.out.println(line);
                line = in.readLine();
            }

            PrintWriter out = new PrintWriter(clientSocket.getOutputStream());
            out.println("HTTP/1.1 200 OK");
            out.println("Content-Type: text/html");
            out.println("");
            out.println("<html><body>");
            out.println("<h1>Hello World!</h1>");
            out.println("</body></html>");
            out.flush();

            clientSocket.close();
        }
    }
}

在浏览器中输入http://localhost:8888/即可查看效果。

以上是Java网络编程的简单例子,网络编程涉及到很多概念和协议,只有通过实际的实践才能理解得更深刻。

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

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

相关文章

  • Spring Security OAuth 个性化token的使用

    下面我来详细讲解“Spring Security OAuth 个性化token的使用”。 什么是Spring Security OAuth Spring Security OAuth 是 Spring Security 的子项目,它是一个支持多种 OAuth2 协议的授权框架。它提供了一些 API 和注解,方便我们进行 OAuth2 认证和授权的开发。 个性…

    Java 2023年5月20日
    00
  • 什么是反射?

    反射 反射是在运行时动态地发现和使用类的信息的机制。Java 反射机制提供了程序在运行时拥有访问并操作任何一个对象、变量、方法的能力。 Java 反射最初被设计出来是为了支持类浏览器这样的工具。在此基础上,JavaBean等技术也得以广泛应用。 反射的使用 在Java中,使用反射需要经过如下基本步骤:1. 获取需要使用的类的Class对象;2. 根据Clas…

    Java 2023年5月10日
    00
  • Java中使用Lambda表达式和函数编程示例

    下面是Java中使用Lambda表达式和函数编程的完整攻略。 什么是Lambda表达式 Lambda表达式是Java8引入的新特性。它使得开发人员可以更直观地使用函数编程来处理数据。Lambda表达式是一个匿名函数,可以传递给方法作为参数。它的语法非常简洁,使用一个箭头“->”来分隔函数的参数列表和函数体。 下面是一个使用Lambda表达式的函数式接口…

    Java 2023年5月19日
    00
  • SpringMVC使用第三方组件实现文件上传

    要使用SpringMVC实现文件上传,需要使用第三方组件,常用的是Apache Commons FileUpload组件。下面是详细的攻略: 1. 引入包 在项目的pom.xml文件中,引入Apache Commons FileUpload组件的依赖: <dependency> <groupId>commons-fileupload&…

    Java 2023年6月15日
    00
  • Java Hibernate中一对多和多对多关系的映射方式

    Java Hibernate是Java平台下一个流行的ORM框架,可以帮助我们将Java对象关系映射到关系型数据库中。在实际应用中,经常需要处理一对多和多对多的关系,例如一个用户可以拥有多个角色,一个订单可以包含多种商品等等。这时我们需要用到Hibernate中的一对多和多对多关系的映射。 一对多关系的映射 一对多的关系 在数据库中,一对多关系通常是通过外键…

    Java 2023年5月19日
    00
  • MVC异常处理详解

    下面是关于“MVC异常处理详解”的完整攻略,包含两个示例说明。 MVC异常处理详解 在MVC(Model-View-Controller)架构中,异常处理是一个非常重要的问题。在应用程序中,可能会发生各种各样的异常,如空指针异常、数据库异常、网络异常等等。如果不进行适当的异常处理,这些异常可能会导致应用程序崩溃或者无法正常工作。本文将详细介绍如何在MVC架构…

    Java 2023年5月17日
    00
  • springboot自动配置原理解析

    Spring Boot自动配置原理解析 Spring Boot是一个快速开发框架,它提供了许多自动配置功能,使得开发者可以快速搭建一个Web应用程序。本文将详细介绍Spring Boot自动配置的原理,并提供两个示例。 自动配置原理 Spring Boot的自动配置是通过条件注解实现的。条件注解是Spring框架提供的一种注解,它可以根据条件来决定是否启用某…

    Java 2023年5月15日
    00
  • 注意Java中 new BigDecimal(double val) 的使用

    使用 new BigDecimal(double val) 构造方法创建 BigDecimal 实例时,需要注意以下几点: 浮点数精度问题:由于浮点数的精度问题,当我们使用 new BigDecimal(double val) 构造方法创建 BigDecimal 实例时,可能会导致精度丢失。比如下面的代码段: java double d = 0.1; // …

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