Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #24176 > unrolled thread

java proxy server problem

Started bymcheung63@gmail.com
First post2013-05-24 04:12 -0700
Last post2013-05-27 11:28 +0200
Articles 5 — 4 participants

Back to article view | Back to comp.lang.java.programmer


Contents

  java proxy server problem mcheung63@gmail.com - 2013-05-24 04:12 -0700
    Re: java proxy server problem Arne Vajhøj <arne@vajhoej.dk> - 2013-05-24 22:01 -0400
      Re: java proxy server problem Peter Cheung <cmk128@gmail.com> - 2013-05-26 20:22 -0700
        Re: java proxy server problem Arne Vajhøj <arne@vajhoej.dk> - 2013-05-27 12:47 -0400
    Re: java proxy server problem Michal Kleczek <michal_wytnijto@kleczek.org> - 2013-05-27 11:28 +0200

#24176 — java proxy server problem

Frommcheung63@gmail.com
Date2013-05-24 04:12 -0700
Subjectjava proxy server problem
Message-ID<a08b9724-2780-487b-bdc8-9cda348808a2@googlegroups.com>
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 (cmk128@hotmail.com)


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) {
				}
			}
		}
	}
}

[toc] | [next] | [standalone]


#24177

FromArne Vajhøj <arne@vajhoej.dk>
Date2013-05-24 22:01 -0400
Message-ID<51a01b8b$0$32106$14726298@news.sunsite.dk>
In reply to#24176
On 5/24/2013 7:12 AM, mcheung63@gmail.com wrote:
>     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

[toc] | [prev] | [next] | [standalone]


#24184

FromPeter Cheung <cmk128@gmail.com>
Date2013-05-26 20:22 -0700
Message-ID<03064b9c-0688-4867-b0ef-ff809e10a576@googlegroups.com>
In reply to#24177
Arne Vajhøj於 2013年5月25日星期六UTC+8上午10時01分46秒寫道:
> On 5/24/2013 7:12 AM, mcheung63@gmail.com wrote:
> 
> >     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

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

[toc] | [prev] | [next] | [standalone]


#24188

FromArne Vajhøj <arne@vajhoej.dk>
Date2013-05-27 12:47 -0400
Message-ID<51a38e0c$0$32118$14726298@news.sunsite.dk>
In reply to#24184
On 5/26/2013 11:22 PM, Peter Cheung wrote:
> Arne Vajhøj於 2013年5月25日星期六UTC+8上午10時01分46秒寫道:
>> On 5/24/2013 7:12 AM, mcheung63@gmail.com wrote:
>>>      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.

>      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



[toc] | [prev] | [next] | [standalone]


#24185

FromMichal Kleczek <michal_wytnijto@kleczek.org>
Date2013-05-27 11:28 +0200
Message-ID<knv905$l16$1@speranza.aioe.org>
In reply to#24176
On 2013-05-24 13:12, mcheung63@gmail.com wrote:
> 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.

--
Michal

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.java.programmer


csiph-web