Java网络编程基础篇之单向通信 原创

当我们开展Java网络编程时,我们首先需要了解的是基础的单向通信。

单向通信是指通信流只能在一条路径上单向发送的通信模式。例如,服务器发送数据到客户端,而客户端不能发送数据回服务器。在 Java 中,单向通信可以通过 Socket 和 ServerSocket 实现。

以下是实现单向通信的步骤:

  1. 创建一个ServerSocket对象,使用一个门牌号绑定到一个本地端口上:
ServerSocket serverSocket = new ServerSocket(portNumber);
  1. 你可以调用 accept() 方法,这将阻塞线程并等待来自客户端的连接:
Socket clientSocket = serverSocket.accept();
  1. 当连接成功后,你就可以从客户端Socket对象中读取数据:
InputStream input = clientSocket.getInputStream();
  1. 为了将数据发送给客户端,可以创建一个 OutputStream 对象:
OutputStream output = clientSocket.getOutputStream();
  1. 最后,确保在结束时关闭服务器Socket和客户端Socket:
clientSocket.close();
serverSocket.close();

这是一个简单的示例,演示了如何在Java中创建一个可接受客户端连接的简单服务器:

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

public class SimpleServer {

    public static void main(String[] args) throws IOException {

        int portNumber = 1234;
        ServerSocket serverSocket = new ServerSocket(portNumber);
        Socket clientSocket = serverSocket.accept();
        InputStream input = clientSocket.getInputStream();
        OutputStream output = clientSocket.getOutputStream();

        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        PrintWriter writer = new PrintWriter(output, true);

        String line;
        while ((line = reader.readLine()) != null) {
            writer.println(line);
        }

        clientSocket.close();
        serverSocket.close();
    }
}

这是一个从客户端向服务器发送数据的示例:

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

public class SimpleClient {

    public static void main(String[] args) throws IOException {

        String hostName = "localhost";
        int portNumber = 1234;

        try (
            Socket clientSocket = new Socket(hostName, portNumber);
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))
        ) {
            String userInput;
            while ((userInput = stdIn.readLine()) != null) {
                out.println(userInput);
                System.out.println("echo: " + in.readLine());
            }
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host " + hostName);
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to " + hostName);
            System.exit(1);
        } 
    }
}

这就是如何在Java中使用单向通信进行基础网络编程的攻略。

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

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Go语言依赖管理三要素示例解析

    Go语言依赖管理三要素示例解析攻略 介绍 Go语言是一种现代化的编程语言,具有强大的依赖管理系统。在Go语言中,依赖管理的三个要素是:go.mod文件、go.sum文件和go get命令。本攻略将详细讲解这三个要素,并提供两个示例说明。 1. go.mod文件 go.mod文件是Go语言项目的模块定义文件,用于管理项目的依赖关系。它包含了项目的模块路径、版本…

    other 2023年9月7日
    00
  • nuxtjs使用less

    Nuxt.js使用Less Nuxt.js 是一个基于 Vue.js 的应用框架,用于构建 SSR(Server Side Render)应用程序。它提供了许多方便的工具和功能,帮助我们更快地构建高质量的 Web 应用程序。其中之一是内置对 CSS 预处理器的支持,包括 Less。 安装Less 要在 Nuxt.js 中使用 Less,首先需要安装它。我们可…

    其他 2023年3月28日
    00
  • C++ explicit构造函数实例解析

    C++ explicit构造函数实例解析 简介 C++中的explicit关键字用于修饰构造函数,它告诉编译器该构造函数不应用于隐式转换。也就是说,当使用该构造函数进行类型转换时,必须显式地调用,否则编译器会报错。 语法 通常情况下,explicit是写在构造函数的前面,如下所示: explicit MyClass(int x); 示例 示例一 class …

    other 2023年6月26日
    00
  • mysql实现表内增加一个字段并赋值

    要在MySQL表中增加一个字段并赋值,需要经过以下几个步骤: 查看表结构,确认要新增的字段是否已存在。可以使用DESC命令查看表结构,示例如下: DESC table_name; 如果要新增的字段不存在,可以使用ALTER TABLE命令来增加字段。ALTER TABLE命令需要指定表名和新增字段的名称、数据类型和约束条件等信息。示例如下: ALTER TA…

    other 2023年6月25日
    00
  • C语言递归:汉诺塔问题分析

    C语言递归:汉诺塔问题分析 1. 什么是汉诺塔问题? 汉诺塔是一个古老的数学问题,它包含三根杆和一些圆盘,盘子从小到大放在一根杆上,按照大小顺序依次排列,如下图所示: | | | — | | —– | | ——- | | _________ _________ _________ 游戏的目标是将所有盘子移动到另一根杆上,遵循以下规则: 一次…

    other 2023年6月27日
    00
  • WinXP注册表应用—注册表使用全攻略之八

    WinXP注册表应用—注册表使用全攻略之八 简介 注册表是Windows操作系统的核心组成部分之一,它保存了大量的系统设置、应用程序设置、系统服务信息等等。在Windows XP操作系统中,注册表的应用非常广泛,几乎所有的系统设置和应用程序设置都是通过注册表来完成的,因此熟练掌握注册表的使用是非常重要的。本文将详细介绍WinXP注册表的应用,为广大用户提供实…

    other 2023年6月28日
    00
  • React 项目中动态设置环境变量

    动态设置环境变量是指,在 React 项目运行过程中,使用程序代码对项目的环境变量进行修改、新增或删除的过程。 以下为详细的操作步骤及示例说明: 步骤: 首先,需要创建一个 .env 文件,用于存放环境变量,文件名必须以 .env 结尾。 在 .env 文件中添加所需要的环境变量,按照 KEY=VALUE 的格式进行书写,例如:REACT_APP_API_K…

    other 2023年6月27日
    00
  • latex表格自动换行

    Latex表格自动换行的完整攻略如下: 概述 基本用法 高级用法 示例说明 1. 概述 在Latex中,表格是一种常见的排版元素。当表格中的内容过长时,需要自动换行以适应页面宽度。本攻略将介绍如何在Latex中实现表格自动换行。 2. 基本用法 在Latex中,可以使用tabular环境创建表格。要实现表格自动换行,可以使用p列类型。p列类型允许指定列宽,并…

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