欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中實現(xiàn)用戶之間的通訊方式

 更新時間:2024年09月20日 10:55:55   作者:J不A禿V頭A  
在Java中實現(xiàn)用戶間通訊主要有兩種方法:Socket編程和WebSocket,Socket編程允許兩個設(shè)備間進行數(shù)據(jù)交換,適用于基本的網(wǎng)絡(luò)通訊,本文提供了兩種方法的基本實現(xiàn)代碼和相關(guān)配置,幫助開發(fā)者根據(jù)需求選擇合適的通訊方式

在Java中實現(xiàn)用戶之間的通訊可以通過多種方式,這里我將介紹兩種常見的方法:使用Socket編程和使用WebSocket。

1. 使用Socket編程

Socket編程是實現(xiàn)網(wǎng)絡(luò)通訊的基礎(chǔ),它允許兩個設(shè)備之間進行數(shù)據(jù)交換。以下是一個簡單的Java Socket編程示例,用于實現(xiàn)客戶端和服務(wù)器之間的基本通訊。

服務(wù)器端代碼(Server.java)

import java.io.*;
import java.net.*;
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(1234); // 服務(wù)器監(jiān)聽的端口號
        System.out.println("Server is listening on port 1234");
        while (true) {
            Socket socket = serverSocket.accept(); // 接受客戶端連接
            new ServerThread(socket).start(); // 為每個連接創(chuàng)建一個新線程
        }
    }
}
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); // 連接到服務(wù)器
        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提供了全雙工通訊,允許服務(wù)器主動發(fā)送信息給客戶端。這通常用于需要實時通訊的應(yīng)用,如聊天應(yīng)用。

服務(wù)器端代碼(使用Spring Boot)

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

然后,創(chuàng)建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("*");
    }
}

創(chuàng)建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>

這兩種方法都可以實現(xiàn)用戶之間的通訊,選擇哪種取決于你的具體需求和應(yīng)用場景。

到此這篇關(guān)于Java中實現(xiàn)用戶之間的通訊的文章就介紹到這了,更多相關(guān)Java用戶之間通訊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java時間 java.util.Calendar深入分析

    java時間 java.util.Calendar深入分析

    這篇文章主要介紹了java時間 java.util.Calendar深入分析的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java 實現(xiàn)分布式服務(wù)的調(diào)用鏈跟蹤

    Java 實現(xiàn)分布式服務(wù)的調(diào)用鏈跟蹤

    分布式服務(wù)中完成某一個業(yè)務(wù)動作,需要服務(wù)之間的相互協(xié)作才能完成,在這一次動作引起的多服務(wù)的聯(lián)動我們需要用1個唯一標識關(guān)聯(lián)起來,關(guān)聯(lián)起來就是調(diào)用鏈的跟蹤。本文介紹了Java 實現(xiàn)分布式服務(wù)的調(diào)用鏈跟蹤的步驟
    2021-06-06
  • java中\(zhòng)t,\n,\r,\b,\f 的作用及說明

    java中\(zhòng)t,\n,\r,\b,\f 的作用及說明

    這篇文章主要介紹了java中\(zhòng)t,\n,\r,\b,\f 的作用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 取消idea雙擊shift鍵時出現(xiàn)的全局搜索的問題分析

    取消idea雙擊shift鍵時出現(xiàn)的全局搜索的問題分析

    這篇文章主要介紹了取消idea雙擊shift鍵時出現(xiàn)的全局搜索的問題分析,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-10-10
  • 基于SpringBoot實現(xiàn)IP黑白名單的詳細步驟

    基于SpringBoot實現(xiàn)IP黑白名單的詳細步驟

    IP黑白名單是網(wǎng)絡(luò)安全管理中常見的策略工具,用于控制網(wǎng)絡(luò)訪問權(quán)限,根據(jù)業(yè)務(wù)場景的不同,其應(yīng)用范圍廣泛,比如比較容易被盜刷的短信接口、文件接口,都需要添加IP黑白名單加以限制,所以本文給大家介紹了基于SpringBoot實現(xiàn)IP黑白名單的詳細步驟,需要的朋友可以參考下
    2024-01-01
  • springboot構(gòu)建docker鏡像并推送到阿里云

    springboot構(gòu)建docker鏡像并推送到阿里云

    本文主要介紹了springboot構(gòu)建docker鏡像并推送到阿里云,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • SpringData JPA基本/高級/多數(shù)據(jù)源的使用詳解

    SpringData JPA基本/高級/多數(shù)據(jù)源的使用詳解

    這篇文章主要介紹了SpringData JPA基本/高級/多數(shù)據(jù)源的使用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java基于servlet使用組件smartUpload實現(xiàn)文件上傳

    java基于servlet使用組件smartUpload實現(xiàn)文件上傳

    這篇文章主要介紹了java基于servlet使用組件smartUpload實現(xiàn)文件上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 開放封閉原則_動力節(jié)點Java學(xué)院整理

    開放封閉原則_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了開放封閉原則,開放-封閉原則是面向?qū)ο笤O(shè)計的核心所在,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 淺談為什么要使用mybatis的@param

    淺談為什么要使用mybatis的@param

    這篇文章主要介紹了淺談為什么要使用mybatis的@param,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評論