multithreading - Tunneling two socket client in java -
i'm trying interconnect 2 socket clients connected single remote server. case is:
- client_1] connect server
- client_2] connect server
- server] create tunnel between client_1 , client_2
- client_1] write "something"
- client_2] (that waiting messages) receive "something" client_1
and viceversa.
that's code:
package jtestsock; import java.io.bufferedreader; import java.io.bufferedwriter; import java.io.ioexception; import java.io.inputstreamreader; import java.io.outputstreamwriter; import java.io.printwriter; import java.net.serversocket; import java.net.socket; import java.util.list; /** * * @author massimodeluisa */ public class server extends thread{ private list<socket> clients; private serversocket server; private int port = 5001; private bufferedreader input; private printwriter output; public server() { try { server = new serversocket(port); } catch (ioexception e) { system.out.println("impossibile istanziare il server: "+e.getmessage()); } } @override public void run() { system.out.println("waiting client message..."); // // server loop here accept connection initiated // client application. // while (true) { try { socket socket = server.accept(); system.out.println("connection received!"); clients.add(socket); /* read response */ input = new bufferedreader( new inputstreamreader( socket.getinputstream())); output = new printwriter( new bufferedwriter( new outputstreamwriter( socket.getoutputstream()))); if(clients.size()>0){ socket first = new socket(); socket second = new socket(); first = clients.get(1); second= clients.get(2); // || second = socket; // ??? tunneling input , output between 2 clients } } catch (ioexception e) { system.out.println("client connection error: "+e.getmessage()); } } } } can me please? :)
update:
clients.size()>0 should >=2 want have atleast 2 sockets not 1 – boxed__l 6
sorry, you're right...thanks!
update:
do plan on having 2 clients? because 1 thing can when 1 client sends information server relay information other client. if plan on having multiple clients though, suggest assigning each client uid. – josh m 10 mins ago
yes, make point point connection between 2 client, passing server, proxy server...
the server must accept more 2 connection, , making 2 thread on server writing , reading redirect messages 1 client 2 other, the cpu saturated.
(ps. sorry english xd)
i way (simplified version):
class server extends thread ... public void run() { while (true) { try { socket s1 = server.accept(); socket s2 = server.accept(); new client(s1, s2).start(); // reads s1 , redirects s2 new client(s2, s1).start(); // reads s2 , redirects s1 } catch (ioexception e) { system.out.println("client connection error: " + e.getmessage()); } } } class client extends thread { socket s1; socket s2; client(socket s1, socket s2) { this.s1 = s1; this.s2 = s2; } public void run() { try { inputstream = s1.getinputstream(); outputstream os = s2.getoutputstream(); (int i; (i = is.read()) != -1; i++) { os.write(i); } } catch (ioexception e) { e.printstacktrace(); } } }
Comments
Post a Comment