Tunnel
Jeg skal ha lavet et java program der kan tage imod x forbindelser og sende dem videre til den samme server (naturligvis med deres egen forbindelse).Jeg har lavet en klasse, der laver et objekt multiserver der laver en workerthread for hver klient der forbinder til vores server side, workerthread laver så et client objekt der forbinder til vores server.
- så lang, så godt :)
men efter det hele er oprettet, og der er opnået forbindelse til ftpen sker der ikke mere, velkomsten fra ftpen sendes heller ikke til klienten (pt. blot telnet).
og beskeder fra klienten sendes ikke til serveren.
- Hvorfor ?
- Er der evt. en anden/bedre måde at lave det nævnte system på ?
*KILDE*
tunnel.java - 21 linjer
import java.io.*;
import java.util.Vector;
public class tunnel
{
private static final String ver = "0001";
public static void main(String[] args)
{
System.out.println ("ALOHA ! Tunnel v. "+ver);
Vector tunnels = new Vector();
try {
tunnels.add(new MultiServer("127.0.0.1", 1234, "127.0.0.1", 21));
}
catch (IOException e)
{
System.out.println ("ERROR : +e");
}
}
}
client.java - 40 linjer
import java.net.*;
import java.io.*;
public class client
{
public client(String host, int port, WorkerThread remote)
{
try {
Socket server = new Socket(host, port);
in = server.getInputStream();
out = server.getOutputStream();
din = new DataInputStream( in );
pout = new PrintStream( out );
String response = din.readLine();
while (response != null)
{
System.out.println ("Server data : "+response);
remote.output.println(response);
response = din.readLine();
}
System.out.println ("Server killed us?");
server.close();
}
catch (IOException e ) { System.out.println ("ERROR : "+e); }
}
public void writeData(String str)
{
pout.println(str);
}
private InputStream in;
private OutputStream out;
private DataInputStream din;
public PrintStream pout;
}
WorkerThread.java - 53 linjer
//WorkerThread.java - handle one connection
import java.io.*;
import java.net.*;
class WorkerThread extends Thread {
WorkerThread(Socket socket, String aip, int aport)
{
clientSocket = socket;
workerNumber++;
number = workerNumber;
ip=aip;
port=aport;
}
public void run()
{
try {
input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
output = new PrintWriter(clientSocket.getOutputStream());
System.out.println("Connection " + number + " established.");
output.println("+OK Tunnel service ready.");
output.flush();
//We need to create a client connection to our remote server and send all data to this conn.
//Save the object of our clientconn here, and send either this object or the thread within to the client conn,
client remote = new client(ip, port, this);
String line = input.readLine();
while (line != null)
{
System.out.println ("Client data : "+line);
remote.pout.println(line);
line = input.readLine();
}
System.out.println ("Client "+number+" died");
}
catch (IOException e) {
System.out.println( e );
}
}
public int getnumber () { return number; }
private Socket clientSocket;
private static int workerNumber = 0;
private int number;
private int port;
private String ip;
private BufferedReader input;
public PrintWriter output;
}
MultiServer.java - 24 linjer
import java.io.*;
import java.net.*;
class MultiServer {
public MultiServer (String bindip, int bindport, String hostip, int hostport)
throws java.io.IOException
{
ServerSocket sock = null;
try {
sock = new ServerSocket(bindport);
}
catch (IOException e) {
System.out.println("Could not listen on port: " + bindport + ", " + e);
System.exit(1);
}
System.out.println("Now listening at port " + bindport);
Socket clientSocket = null;
while (true) {
try {
clientSocket = sock.accept();
}
catch (IOException e) {
System.out.println("Accept failed: " + bindport + ", " + e);
System.exit(1);
}
WorkerThread worker = new WorkerThread(clientSocket, hostip, hostport);
worker.start();
}
}
}
