Alex Rivera | Logout

Connect two client sockets

Asked 2010-04-05T12:08:18.223
14

Let's say Java has two kind of sockets:

  • server sockets "ServerSocket"
  • client sockets or just "Socket"

Imagine the situation of two processes:

X = Client
Y = Server

The server process Y : has a "ServerSocket", that is listening to a TCP port
The client process X : sends a connection request through a "Socket" to Y.

Y: Then the accept() method returns a new client type "Socket",
when it occurs, the two Sockets get "interconnected",

So: the socket in client process, is connected with the socket in the server process.
Then: reading/writing through socket X is like reading/writing through socket Y.
Now, two Client Sockets get interconnected!!

But...
What if I create the two Client sockets in same process, and I want to get them "interconnected" ?

... even possible?

Let's say how to have two client socket get interconnected without using an intermediate ServerSocket?

I've solved it by creating two Threads for continuously reading A and writing B, and other for reading B and writng A...
But I think could be a better way... (Those world-energy-consuming threads are not necessary with the client-server approach)

Any help or advice would be appreciated!! Thanks


Edit:

Example of application: "An existent server application could be converted to a client one", For example VNC server, one client socket connects to the VNC server, and other client socket is created (to connect to a middle server), then the application interconnects the two client resulting the VNC server is a client application! And then, no public IP is needed.

VNCServer---MyApp---> |middle server| <---User

Edit
Report

1 Answer

0

Why do we need a middle server? If you just want to expose VNCServer. Why not try an architecture like following

VNCServer(S) <-> (C)MyApp(S) <-> (C) User

(S) represents a server socket
(C) represents a client socket

In this case MyApp acts both as a client (for VNCServer) and as a server(for User). So you will have to implement both client and server sockets in MyApp and then relay the data.

Edit: To communicate with VNCServer, MyApp needs to know the IP of the VNCServer. User will only be communicating with MyApp and only needs to know MyApp's IP Address. User doesn't need VNCServer's ip address.

answered 2010-06-08T16:23:24.783

Your Answer