Java开发实现的Socket双向通信功能示例

yizhihongxing

下面就是讲解“Java开发实现的Socket双向通信功能示例”的完整攻略。

1. Socket双向通信概述

Socket是一种网络通信协议,可以在网络上实现进程间的通信,它是一种双向的通信机制,也称为套接字。在Java中,Socket通常指的是Java socket API,也就是Java中的网络编程模块。

Java中的Socket通常用于网络编程,可以在两个计算机之间进行通信。一个计算机可以作为服务器,另一个计算机可以作为客户端,服务器可以向客户端传递数据,客户端也可以向服务器传递数据。

Socket通信分为TCP和UDP两种方式,其中TCP是面向连接的通信,保证数据发送的可靠性,而UDP则是无连接的通信,没有数据的可靠性保证。

2. Java实现Socket双向通信

Java中实现Socket双向通信通常需要编写客户端代码和服务器端代码。

2.1 服务器端代码示例

下面是一个简单的服务器端代码示例:

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

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(8888);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 8888.");
            System.exit(1);
        }

        Socket clientSocket = null;
        try {
            clientSocket = serverSocket.accept();
        } catch (IOException e) {
            System.err.println("Accept failed.");
            System.exit(1);
        }

        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
            new InputStreamReader(clientSocket.getInputStream()));
        String inputLine, outputLine;

        //向客户端发送欢迎信息
        outputLine = "欢迎进入系统!";
        out.println(outputLine);

        //接收客户端发送的数据
        while ((inputLine = in.readLine()) != null) {
            System.out.println("接收到客户端数据:" + inputLine);
            //回复客户端数据
            outputLine = "已收到数据:" + inputLine;
            out.println(outputLine);
            if (outputLine.equals("bye")) {
                break;
            }
        }

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

这个服务器端代码监听8888端口,等待客户端的连接。当客户端连接成功后,向客户端发送欢迎信息。然后不断接收客户端发送的数据,并回复相应的数据,直到客户端发送“bye”为止。

2.2 客户端代码示例

下面是一个简单的客户端代码示例:

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

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

        Socket echoSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            echoSocket = new Socket("localhost", 8888);
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(
                                        echoSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: localhost.");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for "
                               + "the connection to: localhost.");
            System.exit(1);
        }

        BufferedReader stdIn = new BufferedReader(
                                   new InputStreamReader(System.in));
        String userInput;

        //接收服务端发送的欢迎信息
        String serverMsg = in.readLine();
        System.out.println("服务器返回的信息:" + serverMsg);
        System.out.println("请输入要发送的信息:");

        //向服务端发送数据
        while ((userInput = stdIn.readLine()) != null) {
            out.println(userInput);
            //接收服务端回复的数据
            serverMsg = in.readLine();
            System.out.println("服务器返回的信息:" + serverMsg);
            if (userInput.equals("bye")) {
                break;
            }
        }

        out.close();
        in.close();
        stdIn.close();
        echoSocket.close();
    }
}

客户端先连接到服务器端,在连接成功后接收服务端发送的欢迎信息。然后不断输入要发送的数据,并发送到服务端,接收服务端回复的数据,直到客户端发送“bye”为止。

3. 总结

通过以上代码示例,我们可以了解到Java中实现Socket双向通信的基本方法。服务器端需要监听端口,等待客户端连接,接收和回复客户端数据;客户端需要连接到服务器端,向服务器端发送数据,并接收服务器端回复的数据。在实际应用中,可以根据具体需求进行扩展和改进。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java开发实现的Socket双向通信功能示例 - Python技术站

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

相关文章

  • 浅谈java实现背包算法(0-1背包问题)

    浅谈Java实现背包算法(0-1背包问题) 背包问题 背包问题是计算机科学中的一个经典问题,形式化地说,给定一个有限的物品集合,每一个物品都有一个重量和价值,目标是找到一个所包含物品的子集,使得这些物品的总重量不超过背包的容量,且这些物品的价值最大。 0-1背包问题 0-1背包问题指的是在背包问题的基础上,要求选出的物品的数量必须是0或1。最优解可能有多个,…

    Java 2023年5月19日
    00
  • JVM工作原理和工作流程简述

    JVM工作原理和工作流程简述 JVM是Java虚拟机的缩写,是一种Java应用程序的运行环境。JVM的主要作用是将编写好的Java程序分解成字节码文件,然后在JVM中解释执行这些字节码,最终将结果输出。JVM具有跨平台、可移植、安全、动态性等优点,广泛应用于计算机领域。下面将对JVM工作原理和工作流程进行简述。 JVM工作原理 JVM的工作原理主要包括以下几…

    Java 2023年5月26日
    00
  • Java 循环队列/环形队列的实现流程

    循环队列(也称为环形队列)是一种在队列的头部和尾部可以相互转换的队列。它可以避免由于队列尾部占满而导致队列无法继续添加元素的问题。Java 中可以通过数组来实现循环队列,以下是实现流程: 1. 定义一个数组和两个指针 先定义一个数组来存储队列中的元素。定义两个指针,分别指向队列头和队列尾。 public class CircularQueue { priva…

    Java 2023年5月26日
    00
  • java 汉诺塔Hanoi递归、非递归(仿系统递归)和非递归规律 实现代码

    Java实现汉诺塔问题的递归解法 汉诺塔问题:有三根相邻的柱子,标号为a、b、c,其中a柱子上有n个直径大小各不相同的圆盘,按从小到大的顺序依次从上到下叠放。要把所有盘子一个一个移动到另一个柱子上,条件是每次只能移动一个盘子,且不能出现大盘压小盘的情况。 看到这个问题,我们第一时间可以想到递归。为了更好的理解递归,我们可以先从最简单的情况开始理解。 当只有1…

    Java 2023年5月19日
    00
  • 利用Kotlin实现破解Android版的微信小游戏–跳一跳

    Title: 利用Kotlin实现破解Android版的微信小游戏–跳一跳 简介 本文将介绍如何利用 Kotlin 开发一个 Android 应用程序,来破解微信小游戏“跳一跳”。本文将包含两个示例说明。 前置知识 了解 Android 开发基础知识 掌握 Kotlin 编程语言 对 Android Studio 熟练掌握 需要的工具 Android St…

    Java 2023年5月23日
    00
  • MyBatis SqlSource源码示例解析

    首先让我们来了解”MyBatis SqlSource源码”是什么。 MyBatis是一个流行的Java ORM框架,与Hibernate和JPA等ORM框架相比,它更加灵活和可定制,它可以根据不同的需求进行配置。MyBatis SqlSource源码实现了构建不同SQL Statement的功能。 接下来,我们将会提供两个示例,帮助你更好地理解MyBatis…

    Java 2023年6月1日
    00
  • spring security自定义认证登录的全过程记录

    下面是关于“spring security自定义认证登录的全过程记录”的详细攻略: 背景 Spring Security是Spring家族中重要的一员,主要用于Web应用的安全框架。它可以实现对应用的URL、方法和资源进行保护,在身份验证和授权方面提供了全面的支持。其中认证是指确认用户身份,而授权是指决定用户可以访问系统哪些资源。Spring Securit…

    Java 2023年5月19日
    00
  • Java实例化的几种方法总结

    Java实例化的几种方法总结 在Java中,对象是类的一个实例,而实例化则是创建这个实例的过程。Java提供了多种实例化对象的方法。以下是几种常见的实例化方法总结: 1. 使用new关键字 使用new关键字是最常见的实例化对象的方法。语法如下: ClassName objectName = new ClassName(); 其中,ClassName表示类的名…

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