中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

java怎么實現端口轉發

小億
283
2023-11-03 17:53:35
欄目: 編程語言

在Java中,可以使用Socket類來實現端口轉發。以下是一個簡單的示例代碼,演示了如何將本地的一個端口轉發到另一個遠程主機的端口。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class PortForwardingExample {
    public static void main(String[] args) {
        int localPort = 12345; // 本地端口
        String remoteHost = "example.com"; // 遠程主機
        int remotePort = 80; // 遠程端口

        try {
            // 創建本地服務器套接字
            ServerSocket serverSocket = new ServerSocket(localPort);
            System.out.println("等待客戶端連接...");

            while (true) {
                // 監聽客戶端連接
                Socket clientSocket = serverSocket.accept();
                System.out.println("客戶端連接成功!");

                // 創建與遠程主機的套接字連接
                Socket remoteSocket = new Socket(remoteHost, remotePort);

                // 創建線程進行數據轉發
                Thread inputThread = new Thread(new ForwardingHandler(clientSocket.getInputStream(), remoteSocket.getOutputStream()));
                Thread outputThread = new Thread(new ForwardingHandler(remoteSocket.getInputStream(), clientSocket.getOutputStream()));

                inputThread.start();
                outputThread.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 數據轉發處理器
    static class ForwardingHandler implements Runnable {
        private final InputStream input;
        private final OutputStream output;

        public ForwardingHandler(InputStream input, OutputStream output) {
            this.input = input;
            this.output = output;
        }

        @Override
        public void run() {
            byte[] buffer = new byte[4096];
            int bytesRead;

            try {
                while ((bytesRead = input.read(buffer)) != -1) {
                    output.write(buffer, 0, bytesRead);
                    output.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

上述代碼創建一個ServerSocket對象來監聽本地指定端口上的連接。當有客戶端連接成功后,會通過Socket對象與遠程主機建立連接。然后,創建兩個線程來分別處理從客戶端到遠程主機和從遠程主機到客戶端的數據轉發。數據轉發處理器實現了Runnable接口,通過讀取輸入流的數據,并將其寫入輸出流來實現轉發。

0
青海省| 石台县| 淮北市| 富川| 南涧| 凤庆县| 肥东县| 甘肃省| 金阳县| 北辰区| 神农架林区| 汨罗市| 白玉县| 峨山| 太谷县| 南阳市| 小金县| 中超| 石楼县| 临沭县| 丹东市| 德惠市| 呼伦贝尔市| 老河口市| 梨树县| 三江| 安化县| 搜索| 荥经县| 夏津县| 怀仁县| 东莞市| 南开区| 玛沁县| 南投县| 慈利县| 清涧县| 图们市| 镇坪县| 松江区| 梅州市|