首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java Socket 程式設計:伺服端修改訊息順序並回傳給客戶端

     編輯:程式設計綜合問答

實驗場景

基於經典 TCP Echo 伺服器/客戶端範例,客戶端發送字串「ab」,預期伺服端回傳「ba」(字元反轉)或大寫「AB」。

核心修改:伺服端加入字元反轉邏輯

在讀取客戶端資料後、寫回前,插入反轉處理:

while ((recvMsgSize = in.read(byteBuffer)) != -1) {
    byte[] changed = reverseBytes(byteBuffer, recvMsgSize);
    out.write(changed, 0, recvMsgSize);
}

// 反轉輔助方法
private static byte[] reverseBytes(byte[] src, int len) {
    byte[] dst = new byte[len];
    for (int i = 0; i < len; i++) {
        dst[i] = src[len - 1 - i];
    }
    return dst;
}

完整伺服端程式碼

package com.test.jvm;
import java.net.*;
import java.io.*;

public class TCP_Server {
    private static final int BUFSIZE = 32;
    public static void main(String[] args) throws IOException {
        if (args.length != 1) throw new IllegalArgumentException("Parameter(s): ");
        int servPort = Integer.parseInt(args[0]);
        ServerSocket servSock = new ServerSocket(servPort);
        byte[] byteBuffer = new byte[BUFSIZE];
        for (;;) {
            Socket clntSock = servSock.accept();
            System.out.println("Handling client at " + clntSock.getInetAddress().getHostAddress() + " on port " + clntSock.getPort());
            InputStream in = clntSock.getInputStream();
            OutputStream out = clntSock.getOutputStream();
            int recvMsgSize;
            while ((recvMsgSize = in.read(byteBuffer)) != -1) {
                byte[] changed = reverseBytes(byteBuffer, recvMsgSize);
                out.write(changed, 0, recvMsgSize);
            }
            clntSock.close();
        }
    }
    private static byte[] reverseBytes(byte[] src, int len) {
        byte[] dst = new byte[len];
        for (int i = 0; i < len; i++) dst[i] = src[len - 1 - i];
        return dst;
    }
}

客戶端無需修改

原 Echo 客戶端即可驗證:輸入「ab」將收到「ba」。

擴充想法

  • 改為大寫:new String(byteBuffer, 0, recvMsgSize).toUpperCase().getBytes()。
  • 加入長度前綴(Length-Prefix)解決 TCP 黏包/拆包問題。
  • 使用 BufferedReader/PrintWriter 處理行導向文字協定。

關鍵學習點

  1. TCP 為串流協定,read() 回傳實際讀取位元組數,必須配合長度處理。
  2. 位元組陣列操作是網路程式設計基礎,掌握反轉、編碼轉換等常見模式。
  3. 生產環境需加入執行緒池、NIO/Netty 等非阻塞框架支援高併發。

透過微調 Echo 範例,快速掌握伺服端資料處理與回傳的核心流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved