# Proxyserver Performance Problem



## Maxim6394 (12. Mrz 2012)

Ich bin grad dabei nen socks5 proxyserver zu erstellen, er funktioniert schon mehr oder weniger. die authentifizierung läuft und die seiten werden geladen, aber nach kurzer zeit ruckelt es wie sau, die cpu auslastung ist bei 100% und der prozess nimmt auch immer mehr ram ein.
ich glaub ich mache da irgendwas mit den threads falsch.

hier ist der hauptteil der die threads erzeugt:

```
public void run()
	{
	
				System.out.println("waiting for clients");
		
			try{
			while(true)
			{
			
			 client=serverSocket.accept();
			 clientThread=new ProxyThread(client,null,this);
			 clientThread.client=true;
			 clientThread.authenticate();   //in der authenticate methode wird der thread am ende auch gestartet.
			 
			 while(true)
			 {
				 if(clientThread.out!=null)
				 {
					 targetThread=new ProxyThread(clientThread.out,client,this);
					 targetThread.start();
					 break;
				 }
			 }
			 
			} 
			}catch(Exception e){System.err.println("connection problem: "+e);};

		System.out.println("Client Connected:"+ client.getLocalAddress());
		
	}
```

ich hab clientThread und targetThread. ich weis aber nicht ob der thread weiterhin ausgeführt wird wenn die instanz eines dieser objekte überschrieben wird. ist das der fall?
in jedem der threads wird dann eigentlich nur der inputstream gelesen und zum jeweiligen outputstream weitergeleitet, bei 2 threads glaube ich nicht dass es 100% cpu auslastung verursachen sollte.

hat jemand ne idee wie man das richtig regeln kann?


----------



## irgendjemand (12. Mrz 2012)

aua ... ohne den rest zu kennen strotz dieses stück schon so nur vor fehlern ...

1) nach dem accept sofort in neuen thread auskoppeln ... und nicht noch haufen kram dran rum basteln

2) schon mal was von getter / setter gehört ? ... variablen protected/public zu machen und dann von außen dierekt zu manipulieren ist ziemlich schlechter stil ... solltest du unbedingt ändern

3) schon mal den fall bedacht wenn clientThread.out==null ? denn dann rast die while wie blöd und frisst damit CPU zeit ohne ende ... ein [c]sleep(100);[/c] innerhalb der inneren while sollte abhilfe schaffen ...

alles in allem ist schon das stück hier ziemlich schlecht ... da will ich den rest garnicht erst sehen ... sonst bekommst du von mir noch ein "fang lieber noch mal neu an" zu hören ...

btw : warum RAD neu erfinden ? gibt doch schon SOCKS implementierungen in java ... -> GOOGLE


----------



## Maxim6394 (13. Mrz 2012)

den ersten punkt versteh ich nicht ganz. wie soll einen thread auskoppeln? ich beende ihn schon mit interrupt() bevor ich einen neuen starte. ich hab jetzt in jede while schleife auch noch ein sleep(100) gemacht, es bringt trotzdem nichts.

hier die run methode von ProxyThread:


```
while(true)
		{					
			try{
				bytesRead=in.getInputStream().read(buffer);
				
				if(bytesRead!=-1)
				{
					byte[] outputArray=new byte[bytesRead];
					for(int i=0;i<bytesRead;i++)
					{outputArray[i]=buffer[i];}
					if(client)
					{
						printBytes(buffer,bytesRead);
					}
					
					
					out.getOutputStream().write(buffer,0,bytesRead);
		
				}
				else
				{
					in.getInputStream().close();				
					out.getOutputStream().close();
					
					in.close();
					out.close();					
				}			
				sleep(100);		
			}catch(Exception e){}
	
		}
```

ich kann genauso sleep(5000) machen, es ändert überhaupt nichts. ich hab auch versucht so viel wie möglich zu entfernen, die for schleife oben zum beispiel hab ich rausgenommen, immernoch keine änderung.

übrigens, wenn ich da unten bei der exception den fehler ausgebe wird das in der endlosschleife ausgegeben, obwohl ich den thread doch kurz vorher beendet hab und sogar noch ein break; hinzugefügt hab.


```
java.net.SocketException: Software caused connection abort: recv failed
java.net.SocketException: Socket is closed
```


----------



## irgendjemand (13. Mrz 2012)

mit 1) war gemeint das du sofort nach dem accept() einen neuen thread startest ... du allerdings hast dann da noch sachen wie weitere methoden und vor allem einen endlos-loop ... ist klar das alles freezed

2) das sleep() sollte in den code da ganz oben innerhalb der inneren while wo [c]if(clientThread.out!=null)[/c] steht ... nur halt unter den if block ... da ja bei dir scheinbar clientThread.out == null ist womit die while wie blöde CPU zeit frisst

ich habs zwar schon mal irgendwo gepostet in den letzten tagen ... aber für dich mal wieder ein minimal beispiel für server-client kommunikation

Server.java

```
public class Server extends Thread
{
	private ServerSocket serverSocket=null;
	private boolean RUN=false;
	public static void main(String[] args) { (new Server()).start(); }
	private Server()
	{
		serverSocket=new ServerSocket(12345);
		RUN=true;
	}
	public void run()
	{
		while(RUN)
		{
			try
			{
				Socket socket=serverSocket.accept();
				(new ClientThread(this, socket)).start();
			}
			catch(Exception e) { e.printStackTrace(); }
		}
	}
}
```

ClientThread.java

```
class ClientThread extends Thread
{
	private Server server=null;
	private Socket socket=null;
	private boolean RUN=false;
	private BufferedReader in=null;
	private PrintStream out=null;
	protected ClientThread(Server server, Socket socket)
	{
		this.server=server;
		this.socket=socket;
		RUN=true;
	}
	public void run()
	{
		in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		out=new PrintStream(socket.getOutputStream());
		String line="";
		while(RUN)
		{
			try
			{
				line=in.readLine();
				if(line==null)
				{
					RUN=false;
					continue;
				}
				if(line.equals(""))
				{
					sleep(10);
					continue;
				}
				// weitere bearbeitung
			}
			catch(Exception e) { e.printStackTrace(); }
		}
	}
	protected void sendMessage(String line) { out.println(line); }
}
```

der client selbst ist dann ähnlich wie der ClientThread aufgebaut ... nur das er anstelle eines ServerSockets einen Socket zum server öffnet ...

btw : in ein catch-block gehört *IMMER* mindestens das hier -> [c]Exception.printStackTrace();[/c]
damit man auch weis wo und warum der fehler aufgetreten ist *siehe mein code*

richtiges exception-handling hast du in meinen code noch selbst einzubauen ... ich hoffe das bekommst du hin ...
ansonsten wäre es auch noch gut wenn man in Server.java etwas einbaut um dort RUN zu togglen


----------



## Maxim6394 (13. Mrz 2012)

ich hab jetzt in der main klasse irgendwas verändert und es lastet die cpu jetzt nur noch bis höchstens 60% aus. es werden trotzdem haufenweise socket closed exceptions ausgegeben, undzwar genau eine zeile nachdem ich abfrage ob die sockets nicht geschlossen sind.


```
if(!in.isClosed() && !out.isClosed())			{
				bytesRead=in.getInputStream().read(buffer);
```


----------



## irgendjemand (13. Mrz 2012)

es wäre vielleicht mal von vorteil wenn du mal ALLES posten würdest ... anstatt immer nur methoden- und häppchen weise ... denn so sieht man wirklich nicht wo die fehler stecken ...


was dein [c]in.getInputStream().read(byte[])[/c] angeht : das würd ich lassen ... denn das sieht so aus als ob du dir jedes mal ein neues InputStream objekt vom socket holen würdest *wobei mich mal interessieren würde was "in" und "out" überhaupt für typen haben ...

aber falls es dich beruhigt : hier mal etwas ähnliches ... ein sog. Sniffer ... ist in dem sinne auch nur ein proxy der allerdings den datenverkehr auf dem rechner wo er läuft ausgibt ... nach etwas änderung kann man einen proxy draus bauen


```
import java.io.*;
import java.net.*;
import java.util.*;
public class Sniffer
{
	public static void main(String[] args)
	{
		if(args.length==3)
		{
			try
			{
				new Sniffer(Integer.parseInt(args[0]), args[1], Integer.parseInt(args[2]));
			}
			catch(Exception e) { System.out.println("USAGE : java Sniffer LOCALPORT REMOTEHOST REMOTEPORT"); System.exit(1); }
		}
		else
		{
			System.out.println("USAGE : java Sniffer LOCALPORT REMOTEHOST REMOTEPORT");
			System.exit(1);
		}
	}
	protected Sniffer(int PORT, String HOST, int HPORT)
	{
		ServerSocket ss=null;
		try { ss=new ServerSocket(PORT); }
		catch(Exception e) { e.printStackTrace(); System.exit(1); }
		while(true)
		{
			try { Socket cs=ss.accept(); (new SnifferConnection(this, cs, HOST, HPORT)).start(); }
			catch(Exception e) { e.printStackTrace(); }
		}
	}
	protected synchronized void p(byte[] in)
	{
		System.out.println(new String(in));
	}
}
class SnifferConnection extends Thread
{
	private Socket cs=null;
	private String HOST;
	private int PORT;
	private Sniffer main;
	protected SnifferConnection(Sniffer main, Socket cs, String HOST, int PORT) { this.main=main; this.cs=cs; this.HOST=HOST; this.PORT=PORT; }
	public void run()
	{
		Socket ss=null;
		try { ss=new Socket(HOST, PORT); }
		catch(Exception e) { e.printStackTrace(); return; }
		InputStream cin=null;
		InputStream sin=null;
		OutputStream cout=null;
		OutputStream sout=null;
		try
		{
			cin=cs.getInputStream();
			sin=ss.getInputStream();
			cout=cs.getOutputStream();
			sout=ss.getOutputStream();
		}
		catch(Exception e) { e.printStackTrace(); return; }
		int or=-1, ir=-1, ch=-1, i=-1;
		long tt=new Date().getTime();
		long tb=new Date().getTime();
		ByteArrayOutputStream bo=new ByteArrayOutputStream();
		ByteArrayOutputStream bi=new ByteArrayOutputStream();
		try
		{
			while(or!=0 || ir!=0 || (tb-tt)<=3000)
			{
				while((or=cin.available())>0)
				{
					for(i=0; i<or; i++)
					{
						ch=cin.read();
						if(ch!=-1) { sout.write(ch); bo.write(ch); }
					}
					main.p(bo.toByteArray());
					sout.flush();
				}
				while((ir=sin.available())>0)
				{
					for(i=0; i<ir; i++)
					{
						ch=sin.read();
						if(ch!=-1) { cout.write(ch); bi.write(ch); }
					}
					main.p(bi.toByteArray());
					cout.flush();
				}
				if(or==0 && ir==0)
				{
					tb=new Date().getTime();
					this.sleep(200);
				}
			}
		}
		catch(Exception e) { e.printStackTrace(); return; }
		finally
		{
			try
			{
				cin.close();
				sin.close();
				cout.close();
				sout.close();
				ss.close();
				cs.close();
			}
			catch(Exception e) { e.printStackTrace(); return; }
		}
	}
}
```

ich weis nicht ob der code so noch funktioniert ... ist lange her das ich das geschrieben habe


----------



## Empire Phoenix (13. Mrz 2012)

Die exception kommt erst beim lesen, weil erst dort die gegenstelle nciht reagiert, du musst den socket prüfen die streams und dann kann es trotzdem fehler geben ist halt alles nur netzwerkbasiert.


----------



## irgendjemand (13. Mrz 2012)

hier würde InputStream.available() vielleicht sinn machen ... wobei ... wenn ich die DOC mal zitieren darf

"gibt an wie viele bytes ohne zu blocken vom InputStream gelesen werden können [...] returned bei dateien deren größe in byte"

in der regel gibt aber InputStream.available() bei net-i/o entweder "0" zurück ... weil eben keine daten im buffer sind und somit alle read() methode "blockierend" sind ... es also solange gewartet wird bis daten überhaupt gelesen werden können ... oder eben die anzahl an bytes die noch im buffer liegen und die man dann erstmal ohne fehler lesen kann ...

was genau nun der auslöser ist lässt sich wie gesagt ohne kompletten code und vor allem stacktrace nicht genau sagen


----------



## Maxim6394 (14. Mrz 2012)

> The available method for class InputStream always returns 0.


 was bringt mir diese methode dann eigentlich?

ich hab da jetzt ein problem mit google: ich bekomme da immer die anfrage mit 
	
	
	
	





```
173.194.69.19.| Port:1187
```
 zu connecten. die ip adresse ist die adresse von google, aber was das für ein port ist versteh ich nicht. wenn man das in den browser eingibt kommt man auf keine seite.

jedenfalls bleibt der code an der stelle mit einer nullpointer exception hängen:

```
out.getOutputStream().write(buffer,0,bytesRead);
```

der buffer ist: 
	
	
	
	





```
5/1/0/1/-83/-62/69/95/1/-69/
```


hier ist der ganze code vom proxyThread:


```
public class ProxyThread extends Thread {


	byte[] buffer=new byte[50000];
	int bytesRead=0;

	Socket in;
	Socket out;
	boolean auth;
	public boolean client=false;
	
	int port=1080;

	
	public ProxyThread(Socket in, Socket out)
	{	

		System.out.println("Thread started");
		this.in=in;
		this.out=out;
	}
	
	public int getUnsignedByte(byte b)
	{
		int intValue=(int)b;
		
		if(intValue<0)
		{
			intValue=b & 0xFF;
			
			return intValue;
		}
		
		return intValue;	
	}
	
	public void printBytes(byte[] buffer, int bytesRead)
	{
		try{
			System.out.println("-------------------");
			for(int i=0;i<bytesRead;i++)
			{
				System.out.print(buffer[i]+"/");			
			}
			System.out.println("");
			System.out.print("|String:|"+new String(buffer,"ASCII"));
			System.out.println("-------------------");	
		}catch(Exception e){System.out.println(e);}
		
	}
	
	public void authenticate()
	{	
	
		try{
			bytesRead=in.getInputStream().read(buffer);
		
			printBytes(buffer,bytesRead);
			
			if(buffer[0]==5)
			{
				
				in.getOutputStream().write(new byte[]{5,0});

				bytesRead=in.getInputStream().read(buffer);
			
				printBytes(buffer,bytesRead);
				
				if(buffer[1]==1)
				{
			
					byte[] host=new byte[bytesRead-6];
					int i;
					StringBuffer hostString=new StringBuffer();
					
					System.out.println("bytesRead:"+bytesRead);
					for( i=4;i<bytesRead-2;i++)
					{		System.out.println(getUnsignedByte(buffer[i])+"|"+(char)buffer[i]);
					
						if(buffer[3]==1)
						{
							hostString.append(String.valueOf(getUnsignedByte(buffer[i]))+".");
							
							host[i-4]=buffer[i];	
						}
						else if(buffer[3]==3)
						{
							hostString.append((char)buffer[i+1]);
						}
							
					}
					in.getOutputStream().write(new byte[]{5,0,0,1,127,0,0,1,10,80});
			
					System.out.println("Host:"+hostString.toString()+"| Port:"+Integer.valueOf(String.valueOf(getUnsignedByte(buffer[bytesRead-2]))+""+getUnsignedByte(buffer[bytesRead-1])));
			
			
					int targetPort=Integer.valueOf(String.valueOf(getUnsignedByte(buffer[bytesRead-2]))+""+getUnsignedByte(buffer[bytesRead-1]));
			
					out=new Socket(hostString.toString(),targetPort);

				
				}
			
			}
					
		}catch(Exception e){e.printStackTrace();}
		
	}
	
	public String byteArrayToString(byte[] bytes)
	{
		StringBuffer s=new StringBuffer();
		
		for(byte b:bytes)
		{	
			s.append(b);
		}
		
		return s.toString();
	}
	
	public void run()
	{
		
		try{
		while(true)
		{					
			sleep(100);
			if(in!=null && out!=null)
			{
		
				try{
					bytesRead=in.getInputStream().read(buffer);	
					
				}catch(Exception e){e.printStackTrace();}
			
				
			}
				
				if(bytesRead>0)
				{	
					
					//System.out.println(bytesRead);
					printBytes(buffer,bytesRead);
					
				try
				{
					out.getOutputStream().write(buffer,0,bytesRead);
					buffer=new byte[50000];
					bytesRead=0;
				}catch(Exception e){e.printStackTrace(); }
						
			}
				else
				{
					if(in!=null)
					{
						in.close();
					}
					if(out!=null)
					{
						out.close();
					}
				
				
					interrupt();
					break;
					
				}
				
				sleep(10);
			

		}	}catch(Exception e){e.printStackTrace();}
	
		
	}

}
```


----------



## irgendjemand (14. Mrz 2012)

wie ich bereits sagte : immer wieder Socket.get*Stream() ist nun wirklich nicht das beste ...
schau dir mal in meinem code an wie das geht : ein mal die streams holen und dann damit arbeiten

außerdem : kompletter stack ... also nicht nur die info "NPE" ... sondern auch alles was da noch drunter steht

wo der port herkommt kann ich leider auch nicht rauslesen ... dafür ist der code zu verwirrend

warum du dann noch "unsigned" byte haben willst versteh ich auch nicht ... aber du musst da nicht extra *0xFF* schreiben ... es reicht wenn du auf int castest ... das vorzeichen wird nicht verschoben ...

alles in allem : unvollständige fehlermeldung *nur NPE ... das reicht nicht ... wir brauchen schon den kompletten stack* , ziemlich wirrer und unsauberer code ... und auch kein vollständiges KSKB um den fehler zu reproduzieren ...

so kann man dir einfach nicht helfen ... wenn du mit den wichtigen infos nicht rausrückt musst du dich über : "gib mal die infos" nicht wundern ...


----------



## Maxim6394 (15. Mrz 2012)

also ich hab das ganze ding nochmal neu geschrieben und versucht, es so sauber und ordentlich wie möglich zu halten. hier der ganze code:

[JAVA=17]
public class ProxyServer extends Thread{


	int port=1080;
	String host="localhost";
	ServerSocket serverSocket;
	boolean stopLoop=false;

	ArrayList <Socket> sockets=new ArrayList<Socket>();

	public ProxyServer()
	{
		try{
			this.serverSocket=new ServerSocket(port);
		}catch(Exception e){e.printStackTrace();}

		System.out.println("Server startred.");

	}

	public void run()
	{
		while(stopLoop==false)
		{
			try{
				Socket clientSocket=serverSocket.accept();
				SocketThread thread01=new SocketThread(clientSocket,null);
				thread01.authenticate();


			}catch(Exception e){e.printStackTrace();}



		}
	}

	public static void main(String[] args)
	{
		new ProxyServer().start();
	}


}
[/code]

[JAVA=31]
public class SocketThread extends Thread{

	Socket in,out;
	InputStream inputStream;
	OutputStream outputStream;

	String host;
	int port;
	boolean stopLoop=false;
	byte[] buffer=new byte[5000];
	int bytesRead=-1;

	boolean startThread=true;

	public SocketThread(Socket in, Socket out)
	{
		this.in=in;
		this.out=out;

		try{
			if(in!=null)
			{
				this.inputStream=in.getInputStream();
			}

			if(out!=null)
			{
				this.outputStream=out.getOutputStream();
			}
		}catch(Exception e){e.printStackTrace();};


	}


	public void run()
	{
		while(stopLoop==false)
		{
			try {
				sleep(100);
			}catch(Exception e) {}

			try{
				if((bytesRead=inputStream.read(buffer))==-1)
				{
					interrupt();
					inputStream.close(); 
					break;
				}
				else
				{
					if(buffer[0]!=5)
					{
						printBytes(buffer,bytesRead);
						outputStream.write(buffer,0,bytesRead);
						buffer=new byte[5000];
						bytesRead=0;
					}
					else
					{

					}

				}

			}catch(Exception e){e.printStackTrace(); interrupt(); try{ out.close();in.close();}catch(Exception err){} break; }

		}
	}


	public void connectToTarget(byte[] buffer, Socket targetSocket)
	{
		byte[] host=new byte[bytesRead-6];
		int i;
		StringBuffer hostString=new StringBuffer();

		System.out.println("bytesRead:"+bytesRead);
		for( i=4;i<bytesRead-2;i++)
		{		

			if(buffer[3]==1)
			{
				hostString.append(String.valueOf(getUnsignedByte(buffer_))+".");

				host[i-4]=buffer;	
			}
			else if(buffer[3]==3)
			{
				hostString.append((char)buffer[i+1]);
			}

		}

		int targetPort=Integer.valueOf(String.valueOf(getUnsignedByte(buffer[bytesRead-2]))+""+getUnsignedByte(buffer[bytesRead-1]));

		try{
			targetSocket=new Socket(hostString.toString(),targetPort);

			out=targetSocket;
			outputStream=targetSocket.getOutputStream();
			SocketThread targetThread=new SocketThread(targetSocket,in);

			start();
			targetThread.start();

			in.getOutputStream().write(new byte[]{5,0,0,1,127,0,0,1,10,80});
		}catch(Exception e){e.printStackTrace();}



	}
	public void authenticate()
	{	
		try{
			bytesRead=inputStream.read(buffer);

			printBytes(buffer,bytesRead);

			if(bytesRead>-1 )
			{
				if(buffer[0]!=5)
				{
					System.err.println("no Socks5 client.");
					startThread=false;

				}
				else
				{
					in.getOutputStream().write(new byte[]{5,0});

					bytesRead=in.getInputStream().read(buffer);

					printBytes(buffer,bytesRead);

					if(buffer[1]==1)
					{
						connectToTarget(buffer,out);
					}
				}
			}

		}catch(Exception e){e.printStackTrace();}
	}
	public int getUnsignedByte(byte b)
	{
		int intValue=(int)b;

		if(intValue<0)
		{
			intValue=b & 0xFF;

			return intValue;
		}

		return intValue;

	}
	public void printBytes(byte[] buffer, int bytesRead)
	{
		try{
			System.out.println("-------------------");
			for(int i=0;i<bytesRead;i++)
			{
				System.out.print(buffer+"/");			
			}
			System.out.println("");
			System.out.print("|String:|"+new String(buffer,"ASCII"));
			System.out.println("-------------------");	
		}catch(Exception e){System.out.println(e);}

	}
}
[/code]

es funktioniert so lange, bis nach einiger zeit eine exception kommt, aus dem nichts. die gleiche die auch dann kommt wenn ich auf google gehe. das programm bleibt dann wohl stehen und seiten sind nicht mehr aufrufbar.



		Code:In die Zwischenablage kopieren


java.net.ConnectException: Connection timed out: connect
	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
	at java.net.Socket.connect(Socket.java:579)
	at java.net.Socket.connect(Socket.java:528)
	at java.net.Socket.<init>(Socket.java:425)
	at java.net.Socket.<init>(Socket.java:208)
	at SocketThread.connectToTarget(SocketThread.java:129)
	at SocketThread.authenticate(SocketThread.java:169)
	at ProxyServer.run(ProxyServer.java:44)
|String:|5/1/0/1/-83/-62/69/94/1/-69/


in der fehlermeldung ist ganz unten eine verbindungsanfrage vom socks5 client. das ist die ip adresse von google und ein port den ich nichtmal zuordnen kann.



			
				http://www.faqs.org/rfcs/rfc1928.html hat gesagt.:
			
		


			+----+-----+-------+------+----------+----------+
        |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |
        +----+-----+-------+------+----------+----------+
        | 1  |  1  | X'00' |  1   | Variable |    2     |
        +----+-----+-------+------+----------+----------+
		
Zum Vergrößern anklicken....

_


----------



## Maxim6394 (15. Mrz 2012)

also ich hatte die ganze zeit wohl falsche ports genommen um zu den servern zu connecten. ich dachte wenn da in den array feldern 1 und 187 steht ist der port 1187, aber das ist nicht der fall. ich musste extra durch irgendeinen bytebuffer den port als short kriegen, da kam dann auf einmal 443 raus, was der richtige port ist(der für https).

im browser scheint jetzt also der proxyserver zu funktionieren, aber in proxifier, wo der server von sämtlichen programmen benutzt werden sollte, gehts nicht.


```
173.194.69.83.||443
java.net.ConnectException: Connection timed out: connect
-------------------
	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
	at java.net.Socket.connect(Socket.java:579)
	at java.net.Socket.connect(Socket.java:528)
	at java.net.Socket.<init>(Socket.java:425)
	at java.net.Socket.<init>(Socket.java:208)
	at SocketThread.connectToTarget(SocketThread.java:134)
	at SocketThread.authenticate(SocketThread.java:194)
	at ProxyServer.run(ProxyServer.java:44)
```

das ist eine der adressen die reinkommt, wo ich hin connecten sollte. die adresse und der port müssen richtig sein, aber da kommt immer nur diese exception. das passiert bei allen verbindungen, zum beispiel wenn ich zu 87.230.59.88:80 connecten will, was ohne probleme geht wenn man es im browser eingibt.
java.net.ConnectException: Connection timed out: connect

hier ein screenshot von proxifier:

_.jpg - Bilder und Fotos kostenlos auf ImageBanana hochladen


----------

