Java中实现用户之间的通讯方式

 更新时间:2024年09月20日 10:55:55   作者:J不A秃V头A  
在Java中实现用户间通讯主要有两种方法:Socket编程和WebSocket,Socket编程允许两个设备间进行数据交换,适用于基本的网络通讯,本文提供了两种方法的基本实现代码和相关配置,帮助开发者根据需求选择合适的通讯方式

在Java中实现用户之间的通讯可以通过多种方式,这里我将介绍两种常见的方法:使用Socket编程和使用WebSocket。

1. 使用Socket编程

Socket编程是实现网络通讯的基础,它允许两个设备之间进行数据交换。以下是一个简单的Java Socket编程示例,用于实现客户端和服务器之间的基本通讯。

服务器端代码(Server.java)

import java.io.*;
import java.net.*;
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(1234); // 服务器监听的端口号
        System.out.println("Server is listening on port 1234");
        while (true) {
            Socket socket = serverSocket.accept(); // 接受客户端连接
            new ServerThread(socket).start(); // 为每个连接创建一个新线程
        }
    }
}
class ServerThread extends Thread {
    private Socket socket;
    public ServerThread(Socket socket) {
        this.socket = socket;
    }
    public void run() {
        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            OutputStream out = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(out, true);
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                System.out.println("Server received: " + inputLine);
                writer.println("Echo: " + inputLine);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

客户端代码(Client.java)

import java.io.*;
import java.net.*;
public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 1234); // 连接到服务器
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        new Thread(() -> {
            try {
                String serverResponse;
                while ((serverResponse = in.readLine()) != null) {
                    System.out.println("Server says: " + serverResponse);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
        String userInput;
        System.out.println("Enter messages (leave empty line to quit):");
        while ((userInput = stdIn.readLine()) != null) {
            out.println(userInput);
            if (userInput.trim().isEmpty()) {
                break;
            }
        }
        socket.close();
        System.exit(0);
    }
}

2. 使用WebSocket

WebSocket提供了全双工通讯,允许服务器主动发送信息给客户端。这通常用于需要实时通讯的应用,如聊天应用。

服务器端代码(使用Spring Boot)

首先,你需要添加Spring Boot的依赖到你的pom.xml文件中:

然后,创建WebSocket配置:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new ChatHandler(), "/chat").setAllowedOrigins("*");
    }
}

创建WebSocket处理器:

import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
public class ChatHandler extends TextWebSocketHandler {
    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        for (WebSocketSession s : sessions) {
            s.sendMessage(new TextMessage("Echo: " + message.getPayload()));
        }
    }
}

客户端代码(HTML + JavaScript)

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Test</title>
    <script>
        var ws = new WebSocket("ws://localhost:8080/chat");
        ws.onmessage = function(event) {
            var message = event.data;
            console.log(message);
            document.getElementById('messages').innerHTML += '<li>' + message + '</li>';
        };
        function sendMessage() {
            var input = document.getElementById('messageInput');
            ws.send(input.value);
            input.value = '';
        }
    </script>
</head>
<body>
    <ul id="messages"></ul>
    <input type="text" id="messageInput"/>
    <button onclick="sendMessage()">Send</button>
</body>
</html>

这两种方法都可以实现用户之间的通讯,选择哪种取决于你的具体需求和应用场景。

到此这篇关于Java中实现用户之间的通讯的文章就介绍到这了,更多相关Java用户之间通讯内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java时间 java.util.Calendar深入分析

    java时间 java.util.Calendar深入分析

    这篇文章主要介绍了java时间 java.util.Calendar深入分析的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java 实现分布式服务的调用链跟踪

    Java 实现分布式服务的调用链跟踪

    分布式服务中完成某一个业务动作,需要服务之间的相互协作才能完成,在这一次动作引起的多服务的联动我们需要用1个唯一标识关联起来,关联起来就是调用链的跟踪。本文介绍了Java 实现分布式服务的调用链跟踪的步骤
    2021-06-06
  • java中\t,\n,\r,\b,\f 的作用及说明

    java中\t,\n,\r,\b,\f 的作用及说明

    这篇文章主要介绍了java中\t,\n,\r,\b,\f 的作用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 取消idea双击shift键时出现的全局搜索的问题分析

    取消idea双击shift键时出现的全局搜索的问题分析

    这篇文章主要介绍了取消idea双击shift键时出现的全局搜索的问题分析,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-10-10
  • 基于SpringBoot实现IP黑白名单的详细步骤

    基于SpringBoot实现IP黑白名单的详细步骤

    IP黑白名单是网络安全管理中常见的策略工具,用于控制网络访问权限,根据业务场景的不同,其应用范围广泛,比如比较容易被盗刷的短信接口、文件接口,都需要添加IP黑白名单加以限制,所以本文给大家介绍了基于SpringBoot实现IP黑白名单的详细步骤,需要的朋友可以参考下
    2024-01-01
  • springboot构建docker镜像并推送到阿里云

    springboot构建docker镜像并推送到阿里云

    本文主要介绍了springboot构建docker镜像并推送到阿里云,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • SpringData JPA基本/高级/多数据源的使用详解

    SpringData JPA基本/高级/多数据源的使用详解

    这篇文章主要介绍了SpringData JPA基本/高级/多数据源的使用详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • java基于servlet使用组件smartUpload实现文件上传

    java基于servlet使用组件smartUpload实现文件上传

    这篇文章主要介绍了java基于servlet使用组件smartUpload实现文件上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 开放封闭原则_动力节点Java学院整理

    开放封闭原则_动力节点Java学院整理

    这篇文章主要介绍了开放封闭原则,开放-封闭原则是面向对象设计的核心所在,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 浅谈为什么要使用mybatis的@param

    浅谈为什么要使用mybatis的@param

    这篇文章主要介绍了浅谈为什么要使用mybatis的@param,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10

最新评论