java鎬庝箞瀹炵幇绔彛杞彂
鍦↗ava涓紝鍙互浣跨敤Socket绫绘潵瀹炵幇绔彛杞彂銆備互涓嬫槸涓€涓畝鍗曠殑绀轰緥浠g爜锛屾紨绀轰簡濡備綍灏嗘湰鍦扮殑涓€涓鍙h浆鍙戝埌鍙︿竴涓繙绋嬩富鏈虹殑绔彛銆?/p>
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) {
// 鐩戝惉瀹㈡埛绔繛鎺?/span>
Socket clientSocket = serverSocket.accept();
System.out.println("瀹㈡埛绔繛鎺ユ垚鍔?");
// 鍒涘缓涓庤繙绋嬩富鏈虹殑濂楁帴瀛楄繛鎺?/span>
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();
}
}
// 鏁版嵁杞彂澶勭悊鍣?/span>
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();
}
}
}
}
涓婅堪浠g爜鍒涘缓涓€涓猄erverSocket瀵硅薄鏉ョ洃鍚湰鍦版寚瀹氱鍙d笂鐨勮繛鎺ャ€傚綋鏈夊鎴风杩炴帴鎴愬姛鍚庯紝浼氶€氳繃Socket瀵硅薄涓庤繙绋嬩富鏈哄缓绔嬭繛鎺ャ€傜劧鍚庯紝鍒涘缓涓や釜绾跨▼鏉ュ垎鍒鐞嗕粠瀹㈡埛绔埌杩滅▼涓绘満鍜屼粠杩滅▼涓绘満鍒板鎴风鐨勬暟鎹浆鍙戙€傛暟鎹浆鍙戝鐞嗗櫒瀹炵幇浜哛unnable鎺ュ彛锛岄€氳繃璇诲彇杈撳叆娴佺殑鏁版嵁锛屽苟灏嗗叾鍐欏叆杈撳嚭娴佹潵瀹炵幇杞彂銆?/p>
相关问答