Java代理不显示任何内容:客户端<--&燃气轮机;服务器
这是我的代码:Java代理不显示任何内容:客户端<--&燃气轮机;服务器,java,proxy,Java,Proxy,这是我的代码: import java.io.*; import java.net.*; public class proxy { public static void main(String[] args) throws IOException { try { String host = "gamea.clashofclans.com"; int remoteport = 9339; ServerSocket ss = new ServerSo
import java.io.*;
import java.net.*;
public class proxy {
public static void main(String[] args) throws IOException {
try {
String host = "gamea.clashofclans.com";
int remoteport = 9339;
ServerSocket ss = new ServerSocket(0);
int localport = ss.getLocalPort();
ss.setReuseAddress(true);
// Print a start-up message
System.out.println("Starting proxy for " + host + ":" + remoteport
+ " on port " + localport);
// And start running the server
runServer(host, remoteport, localport,ss); // never returns
System.out.println("Started proxy!");
} catch (Exception e) {
System.err.println(e);
}
}
/**
* runs a single-threaded proxy server on
* the specified local port. It never returns.
*/
public static void runServer(String host, int remoteport, int localport, ServerSocket ss)
throws IOException {
// Create a ServerSocket to listen for connections with
System.out.println("Connected to Client!");
final byte[] request = new byte[2048];
byte[] reply = new byte[4096];
while (true) {
Socket client = null, server = null;
try {
// Wait for a connection on the local port
client = ss.accept();
System.out.println("Client Accepted!");
final InputStream streamFromClient = client.getInputStream();
final OutputStream streamToClient = client.getOutputStream();
// Make a connection to the real server.
// If we cannot connect to the server, send an error to the
// client, disconnect, and continue waiting for connections.
try {
server = new Socket(host, remoteport);
System.out.println("Client connected to server.");
} catch (IOException e) {
PrintWriter out = new PrintWriter(streamToClient);
out.print("Proxy server cannot connect to " + host + ":"
+ remoteport + ":\n" + e + "\n");
out.flush();
client.close();
System.out.println("Client disconnected");
continue;
}
// Get server streams.
final InputStream streamFromServer = server.getInputStream();
final OutputStream streamToServer = server.getOutputStream();
// a thread to read the client's requests and pass them
// to the server. A separate thread for asynchronous.
Thread t = new Thread() {
public void run() {
int bytesRead;
try {
while ((bytesRead = streamFromClient.read(request)) != -1) {
streamToServer.write(request, 0, bytesRead);
streamToServer.flush();
}
} catch (IOException e) {
}
// the client closed the connection to us, so close our
// connection to the server.
try {
streamToServer.close();
} catch (IOException e) {
}
}
};
// Start the client-to-server request thread running
t.start();
// Read the server's responses
// and pass them back to the client.
int bytesRead;
try {
while ((bytesRead = streamFromServer.read(reply)) != -1) {
streamToClient.write(reply, 0, bytesRead);
streamToClient.flush();
}
} catch (IOException e) {
}
// The server closed its connection to us, so we close our
// connection to our client.
streamToClient.close();
} catch (IOException e) {
System.err.println(e);
} finally {
try {
if (server != null)
server.close();
if (client != null)
client.close();
} catch (IOException e) {
}
}
}
}
}
当我运行它时,我会看到一条消息“connectedtoclient”(第40行),但在那之后,窗口中什么也没有发生。我没有收到“客户端已连接到服务器消息”,所以我假设问题就在附近的某个地方
为什么会这样?有人知道怎么解决吗
我对java非常陌生,所以请不要对我苛刻。您的“连接到客户端!”消息具有误导性。此时,您正在启动服务器,客户端将很快能够连接,但尚未连接任何客户端。您的程序正在等待
client = ss.accept();
返回。等待通过端口建立连接。您需要另一个线程、程序或计算机连接到此端口,才能开始将它们作为客户端托管。确保其他线程、程序或计算机已正确配置为连接到打开的端口。您可能需要将ServerSocket设置为使用固定端口,或者确定它在哪个端口上打开了一个套接字,并告诉您的其他程序要使用哪个端口。我有一个使用Sport 9339的Bluestack游戏。仍然无法工作。@Shiv
9339
是您正在连接的gamea.clashofclans.com
上的端口;您的客户端需要连接到端口localport
,该端口在您每次运行此程序时都可能更改。@Shiv取决于您的客户端。如果总是连接到端口9339,只需将localport设置为始终为9339:ServerSocket ss=newserversocket(9339)代码>