java proxy server problem

M

mcheung63

Dear All
My proxy server just work in one level forward, That mean vncviewer->my proxy server->vnc server works.
But for two levels forward, vncviewer->my proxy server->my proxy server > vncserver doesn't work, so why?

thanks
from Peter ([email protected])


import java.io.IOException;
import java.io.InputStream;
import java.io_OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleProxyServer {
public static void main(String[] args) throws IOException {
try {
String host = "210.5.164.14";
int remoteport = 5999;
int localport = 1234;
// 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); // never returns
} 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) throws IOException {
// Create a ServerSocket to listen for connections with
ServerSocket ss = new ServerSocket(localport);

final byte[] request = new byte[1024];
byte[] reply = new byte[4096];

while (true) {
Socket client = null, server = null;
try {
// Wait for a connection on the local port
client = ss.accept();

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);
} catch (IOException e) {
PrintWriter out = new PrintWriter(streamToClient);
out.print("Proxy server cannot connect to " + host + ":" + remoteport + ":\n" + e + "\n");
out.flush();
client.close();
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) {
}
}
}
}
}
 
A

Arne Vajhøj

My proxy server just work in one level forward, That mean vncviewer->my proxy server->vnc server works.
But for two levels forward, vncviewer->my proxy server->my proxy server > vncserver doesn't work, so why?

Could you elaborate on "doesn't work"?
} catch (IOException e) {
}
} catch (IOException e) {
}
} catch (IOException e) {
}
} catch (IOException e) {
}

I would suggest printing something in those catch block to help
troubleshooting.

Arne
 
P

Peter Cheung

Arne Vajhøjæ–¼ 2013å¹´5月25日星期六UTC+8上åˆ10時01分46秒寫é“:
Could you elaborate on "doesn't work"?







I would suggest printing something in those catch block to help

troubleshooting.



Arne

Hi Arne
My java proxy server only work in one-level. That mean:

Program -> proxy -> target server <-- this works
PProgram -> proxy -> proxy -> target server <-- this doesn't works, two proxy servers
 
M

Michal Kleczek

Dear All
My proxy server just work in one level forward, That mean vncviewer->my proxy server->vnc server works.
But for two levels forward, vncviewer->my proxy server->my proxy server > vncserver doesn't work, so why?

public class SimpleProxyServer {
public static void main(String[] args) throws IOException {
try {
String host = "210.5.164.14";
int remoteport = 5999;
int localport = 1234;

I assume your proxies are run on different hosts (so they can both bind
to port 1234).
Your first proxy connects to port 5999 and the second listens on port
1234. They both connect to the target server.
// 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) {
}

Here you are blocking accepting new connections.
Server-to-client relay should be done in a dedicated thread such as
client-to-server.
 
A

Arne Vajhøj

Arne Vajhøjæ–¼ 2013å¹´5月25日星期六UTC+8上åˆ10時01分46秒寫é“:
My java proxy server only work in one-level. That mean:

Program -> proxy -> target server <-- this works
PProgram -> proxy -> proxy -> target server <-- this doesn't works, two proxy servers

You already wrote that once.

But what does "doesn't work" really mean.

Does the PC blowup and destroy the house?

Do you get an error message?

Or?

Arne
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,566
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top