Socket

  • Antworten:61
asdf j.
  • Forum-Beiträge: 53

07.08.2012, 14:34:14 via Website

Hi,
versuche gerade eine Verbindung mit einem Server mittels Socket aufzubauen, leider scheitert dieser Versuch jedesmal an dieser Zeile :
socket = new Socket("10.4.2.12",80);
Als Fehler bekomme ich immer "permission denied"
kann mir bitte jemand weiter helfen? :D
Mit freundlichen Grüßen
Philipp H.

Matteo Zmollnig

Antworten
asdf j.
  • Forum-Beiträge: 53

07.08.2012, 14:47:40 via Website

Der Server befindet sich aber im Lan und nicht im Internet,
brauch ich dann eine andere permission?
MfG

Matteo Zmollnig

Antworten
asdf j.
  • Forum-Beiträge: 53

07.08.2012, 16:27:09 via Website

Danke hat schonmal funktioniert :)
nur habe ich jetzt schon wieder das nächste Problem:

textIn = (TextView) findViewById(R.id.textIn);
...
datainputstream = new DataInputStream(socket.getInputStream());
textIn.setText(datainputstream.readUTF());

in der letzten Zeile bleibt er stehen und hängt sich auf...
habt ihr eine Idee?
MfG

Matteo Zmollnig

Antworten
André
  • Forum-Beiträge: 77

07.08.2012, 16:33:19 via Website

Die Zeile läuft nicht durch wenn du von der anderen Seite einen String mit writeUTF() reinschiebst?
Oder ich verstehe nicht so ganz was du vorhast.

Antworten
asdf j.
  • Forum-Beiträge: 53

07.08.2012, 16:47:44 via Website

ich möchte vom Server eine Text emfpangen, nur funktioniert das nicht, weil er sich beim debugen genau in dieser Zeile aufhängt.

Matteo Zmollnig

Antworten
Matteo Zmollnig
  • Forum-Beiträge: 51

07.08.2012, 16:53:37 via Website

hallo hab das gleiche problem!
beim debuggen kommt er zu dieser zeile und geht dann nicht weiter und gibt aber auch keine Fehlermeldung durch die try&catch exception

asdf j.

Antworten
Markus B.
  • Forum-Beiträge: 636

07.08.2012, 17:02:46 via Website

Hi,
dann zeigt doch mal ein bissel Code und schaut mal ins LogCat ... meine Glaskugel zeigt nur Gewitter an :)

Gruß,
Markus

asdf j.Matteo Zmollnig

Antworten
asdf j.
  • Forum-Beiträge: 53

08.08.2012, 08:01:37 via Website

public class MainActivity extends Activity {
EditText textOut;
TextView textIn;
EditText txtip;
EditText txtport;
Socket socket;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textIn = (TextView) findViewById(R.id.textIn);
textOut = (EditText) findViewById(R.id.textOut);
txtip = (EditText) findViewById(R.id.txtip);
txtport = (EditText) findViewById(R.id.txtport);
}
public void ButtonKlick(View V){
DataInputStream datainputstream = null;

try
{
socket = new Socket("10.4.2.49",80);
datainputstream = new DataInputStream(socket.getInputStream());
textIn.setText(datainputstream.readUTF());
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
(datainputstream != null)
{
try
{
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
;

public void Buttonsenden (View V){
Socket socket = null;
DataOutputStream dataoutputstream = null;

try
{
socket = new Socket("10.4.2.49",80);
dataoutputstream = new DataOutputStream(socket.getOutputStream());
dataoutputstream.writeUTF(textOut.getText().toString());
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if(socket != null)
{
try
{
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
if(dataoutputstream != null)
{
try
{
dataoutputstream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
;

das ist der Code bis jetzt. was ist ein LogCat?
MfG

Matteo Zmollnig

Antworten
Michael H
  • Forum-Beiträge: 127

08.08.2012, 08:35:45 via Website

Hallo Philipp

Wieso machst du bei jedem Button-Click den kompletten Socket neu auf? Ich würde den Socket zu Beginn der Activity aufbauen und anschliessend immer über diese Socketinstanz kommunizieren. Dasselbe mit dem Input / Outputsream.

Die Methode readUTF() liefert dir den nächsten String. Das heisst, sofern der InputStream noch vorhanden ist, wartet dieser solange auf einen UTF-String bis wir graue Haare kriegen. Deshalb vermute ich, dass von der Gegenstelle nichts gesendet wird. Kannst du das mal überprüfen?

Gruss

Antworten
asdf j.
  • Forum-Beiträge: 53

08.08.2012, 09:11:42 via Website

Hallo Michael
Das mit dem Socket und Input/Outputstream hab ich schon geändert :)
Das Senden funktioniert einwandfrei aber wie du schon erwähnt hast wartet er beim readUTF() und leider wartet er nicht nur sonder bringt dadurch das ganze Programm zum abstürzen... die Gegenstelle kann schon senden nur kann ich nichts emfpangen :D
Hast du für das Problem eine bessere Lösung? :)
MfG

Antworten
Michael H
  • Forum-Beiträge: 127

08.08.2012, 09:15:14 via Website

Was läuft dann auf der 10.4.2.49:80 für ein Server?

Ah interessant, wusste ich nicht...

— geändert am 08.08.2012, 09:16:24

Antworten
asdf j.
  • Forum-Beiträge: 53

08.08.2012, 09:24:46 via Website

ein TCP-Server mit diesem Hercules Setup utility
MfG

Antworten
Matteo Zmollnig
  • Forum-Beiträge: 51

08.08.2012, 10:18:36 via Website

Rafael K.
Ahhhhhh jetzt hab ichs !!!

Man darf nur als root-user Server-Sockets auf den Ports unter 1024 erstellen.
Also entweder muss deine App unter root laufen, oder du änderst den Port.

Was meinst du mit "unter Root laufen"?

Antworten
Matteo Zmollnig
  • Forum-Beiträge: 51

08.08.2012, 12:52:20 via Website

Das sollte mir jetzt wie helfen......?

Antworten
André
  • Forum-Beiträge: 77

08.08.2012, 13:02:48 via Website

Indem du es liest und verstehst?

Versuch halt keinen Socket auf Port 80 aufzumachen.

Antworten
Matteo Zmollnig
  • Forum-Beiträge: 51

08.08.2012, 13:08:38 via Website

Wir habens ja auf Port 23 auch schon versucht.
Es ist egal welcher Port verwendet wird!

Antworten
André
  • Forum-Beiträge: 77

08.08.2012, 13:12:03 via Website

Wie denn jetzt... habt ihr Port 23 versucht (und damit die oben von Rafael gegebene Lösung völlig ignoriert) oder ist egal welcher Port verwendet wird?

Antworten
Matteo Zmollnig
  • Forum-Beiträge: 51

08.08.2012, 13:30:43 via Website

ich habs eh verstanden
mir geht nur nicht ein, warum funktioniert dann senden über diesen Port serwohl?

Antworten
asdf j.
  • Forum-Beiträge: 53

08.08.2012, 13:41:59 via Website

Senden funktioniert auf Port 80 warum sollte es bei Empfangen anders sein?
MfG

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

08.08.2012, 13:42:50 via Website

Weil es ein Unterschied ist, ob du einen lauschenden Port öffnest, auf den sich externe Anwendungen verbinden können und damit potenziell das System für remote Zugriff öffnest, oder du nur Daten von einem anderen Server holst.

Sonst wäre es ja z.B. viel zu einfach für Schadsoftware einen Fake-Server zu installieren, der sich als normale SSH Shell, FTP Server, als SMTP, POP3, whatever ausgibt und damit jede Menge Unfug anstellt.
Häufig sind das ja die einzigen Ports, die speziell für diese Dienste gezielt in Firewalls geöffnet werden und damit besonders attraktiv für Backdoors.
Das ist nur EIN Szenario wie man das ausnutzen könnte.

— geändert am 08.08.2012, 13:50:54

Antworten
asdf j.
  • Forum-Beiträge: 53

09.08.2012, 08:46:01 via Website

wir haben deinen Rat nicht ignoriert, wir haben es mit Ports über 1024 probiert, nur der Fehler bleibt der gleiche
MfG

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

09.08.2012, 09:16:09 via Website

Dann gehts jetzt nur noch mit der Exception aus dem LogCat weiter, poste die doch mal hier :)

Hab deinen Code übrigens nochmal mal komplett gelesen.
Die Geschichte mit dem Port < 1024 gilt für
http://developer.android.com/reference/java/net/ServerSocket.html in Verbindung mit
http://developer.android.com/reference/java/net/ServerSocket.html#accept()
Das war wohl etwas voreilig geraten von mir, das nutzt du nämlich garnicht...klang nur in der textuellen Beschreibung deines Problems so :)

Antworten
asdf j.
  • Forum-Beiträge: 53

09.08.2012, 10:03:46 via Website

aso ok :D
ja nur was ist ein "LogCat"? :)
MfG

Antworten
asdf j.
  • Forum-Beiträge: 53

09.08.2012, 10:24:42 via Website

ja schon nur sagt mir das nicht wo ich das finden kann :D
MfG

Antworten
asdf j.
  • Forum-Beiträge: 53

09.08.2012, 10:40:20 via Website

ok hab das LogCat gefunden
bevor ich dieses Problem aber beheben kann, steht ein größeres bevor,
und zwar brauche eine bestehende Socketverbindung, sollte die Verbindung unterbrochen werden (kein Empfang) soll er versuchen die Verbindung wieder aufzubauen, aber wenn er mit Socket dann verbinden will und keine Verbindung möglich ist entsteht ein Fehler und das Programm funkioniert nicht mehr.
Gibt es eine Möglichkeit eine Socketverbindung aufzubauen, die nur versucht eine Verbindung herzustellen und wenn es nicht erfolgreich ist einfach nichts tut? oder zumindest nicht das ganze Programm zum abstürzen bringt. :)
MfG

Antworten
Markus B.
  • Forum-Beiträge: 636

09.08.2012, 10:55:50 via Website

Hi,
die Lösung dafür ist eben diesen Fehler von die zu behandeln.
Versuchst du also eine Verbindung aufzubauen und dieses funktioniert nicht muss dein Programm eben dieses handel.
z.B. (Pseudocode)

1while (i <= maxversuche) {
2try {
3 // Socket finde dich
4}
5catch ( final Exception e )
6{
7 Log.e("TAG", Alles okay durfte passieren);
8 Thread.sleep( timeInMilliSek );
9 i++;
10}
11}

Den Code packst du dann z.B. in einen AsyncTask / Thread und zeigst dem User einen Dialog an.

Gruß,
Markus

— geändert am 09.08.2012, 10:58:26

Antworten
asdf j.
  • Forum-Beiträge: 53

09.08.2012, 11:14:16 via Website

ja so etwas ähnliche probier ich schon die ganze Zeit,
ich stell beim Öffnen der App automatisch die Verbindung zum Server her und sende dem Server 1Byte den ich durchs Echo vom Server wieder zurück bekommen, so überprüfe ich die bestehende Verbindung.
Sollte dann die Verbindung unterbrechen versucht er mit Socket = new Socket(IP,Port); die Verbindung wieder herzustellen.
das ganze passiert hier in einem CountDownTimer.
funktioniert eig recht gut, nur wenn der Server aus ist und ich versuche zu verbinden stürzt das Programm ab.
Und das hat sich leider auch mit deinem Beispiel nicht geändert
MfG

Antworten
Markus B.
  • Forum-Beiträge: 636

09.08.2012, 11:22:13 via Website

Hi,
mit welchem Fehler gehts denn Kaputt ? Der steht 100%tig im LogCat ... evtl. ANR ?

Gruß,
Markus

Antworten
asdf j.
  • Forum-Beiträge: 53

09.08.2012, 11:30:52 via Website

08-09 09:28:10.129: W/System.err(338): java.io.EOFException
08-09 09:28:10.129: W/System.err(338): at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:415)
08-09 09:28:10.138: W/System.err(338): at java.io.DataInputStream.readUTF(DataInputStream.java:433)
08-09 09:28:10.138: W/System.err(338): at com.example.sockettest.MainActivity$1.onTick(MainActivity.java:78)
08-09 09:28:10.148: W/System.err(338): at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:124)
08-09 09:28:10.148: W/System.err(338): at android.os.Handler.dispatchMessage(Handler.java:99)
08-09 09:28:10.158: W/System.err(338): at android.os.Looper.loop(Looper.java:123)
08-09 09:28:10.158: W/System.err(338): at android.app.ActivityThread.main(ActivityThread.java:3683)
08-09 09:28:10.168: W/System.err(338): at java.lang.reflect.Method.invokeNative(Native Method)
08-09 09:28:10.168: W/System.err(338): at java.lang.reflect.Method.invoke(Method.java:507)
08-09 09:28:10.178: W/System.err(338): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-09 09:28:10.178: W/System.err(338): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-09 09:28:10.178: W/System.err(338): at dalvik.system.NativeStart.main(Native Method)
08-09 09:28:12.138: D/AndroidRuntime(338): Shutting down VM
08-09 09:28:12.138: W/dalvikvm(338): threadid=1: thread exiting with uncaught exception (group=0x40015560)
08-09 09:28:12.169: E/AndroidRuntime(338): FATAL EXCEPTION: main
08-09 09:28:12.169: E/AndroidRuntime(338): java.lang.IllegalStateException: Could not find a method ButtonStart(View) in the activity class com.example.sockettest.MainActivity for onClick handler on view class android.widget.Button with id 'buttonstart'
08-09 09:28:12.169: E/AndroidRuntime(338): at android.view.View$1.onClick(View.java:2131)
08-09 09:28:12.169: E/AndroidRuntime(338): at android.view.View.performClick(View.java:2485)
08-09 09:28:12.169: E/AndroidRuntime(338): at android.view.View$PerformClick.run(View.java:9080)
08-09 09:28:12.169: E/AndroidRuntime(338): at android.os.Handler.handleCallback(Handler.java:587)
08-09 09:28:12.169: E/AndroidRuntime(338): at android.os.Handler.dispatchMessage(Handler.java:92)
08-09 09:28:12.169: E/AndroidRuntime(338): at android.os.Looper.loop(Looper.java:123)
08-09 09:28:12.169: E/AndroidRuntime(338): at android.app.ActivityThread.main(ActivityThread.java:3683)
08-09 09:28:12.169: E/AndroidRuntime(338): at java.lang.reflect.Method.invokeNative(Native Method)
08-09 09:28:12.169: E/AndroidRuntime(338): at java.lang.reflect.Method.invoke(Method.java:507)
08-09 09:28:12.169: E/AndroidRuntime(338): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-09 09:28:12.169: E/AndroidRuntime(338): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-09 09:28:12.169: E/AndroidRuntime(338): at dalvik.system.NativeStart.main(Native Method)
08-09 09:28:12.169: E/AndroidRuntime(338): Caused by: java.lang.NoSuchMethodException: ButtonStart
08-09 09:28:12.169: E/AndroidRuntime(338): at java.lang.ClassCache.findMethodByName(ClassCache.java:247)
08-09 09:28:12.169: E/AndroidRuntime(338): at java.lang.Class.getMethod(Class.java:962)
08-09 09:28:12.169: E/AndroidRuntime(338): at android.view.View$1.onClick(View.java:2124)
08-09 09:28:12.169: E/AndroidRuntime(338): ... 11 more
08-09 09:28:17.399: I/Process(338): Sending signal. PID: 338 SIG: 9

das ist aufgetaucht durch den Fehler :blink:
ganz schön heavy :D

Antworten
Markus B.
  • Forum-Beiträge: 636

09.08.2012, 11:49:10 via Website

Zur java.io.EOFException:
Du gehst in der App nicht sauber mit dem Socket um. Am Anfang wurde gesagt nutzt eine Socket-Instanz für die gesamte Kommunikation. Das würde ich nicht machen, da wenn z.B. die Verbindung zum Server abbricht der Socket dich gemacht wird. Dann greifst du auf die alte Instanz zu (lesen/schreiben) und schon kommt die Exception. Du musst für jede neue Verbindung ein neues Socket erzeugen. Das ganze Socket Zeug würde ich in eine Klasse auslagern, welche immer dafür sorgt das du ein "sauberes" Socket bekommst. Desweiteren musst du genau darauf achten wann du close() nutzt. Einmal an der falschen Stelle und du bekommst dieses Exception.

Zu java.lang.IllegalStateException:
Gut ziemlich simple du klickst auch dein Button mit der id: buttonstart und diese Methode ButtonStart(View) gibt es einfach nicht. Dort fehlt diese in der entsprechenden Activity.

asdf j.

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

09.08.2012, 11:49:58 via Website

Also ich sehe da 2 Fehler

Could not find a method ButtonStart(View) in the activity class com.example.sockettest.MainActivity for onClick handler on view class android.widget.Button with id 'buttonstart'
Du hast als onClick Methode eine nicht existierende Methode deklariert

EOFException
EOF = End of file
Der Stream enthält also keine Daten, oder wird weitergelesen obwohl er bereits vollständig gelesen wurde.

EDIT: da war wohl einer schneller :)

— geändert am 09.08.2012, 11:50:18

Antworten
asdf j.
  • Forum-Beiträge: 53

09.08.2012, 12:39:53 via Website

ich möchte das Socket ja nicht schließen, ich brauche eine immer bestehende Serververbindung, desshalb hab ich kein close()
und das mit den nicht existierenden Button ist momentan egal, hat normal damit nichts zu tun :D
MfG

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

09.08.2012, 12:54:20 via Website

Philipp H.
das mit den nicht existierenden Button ist momentan egal, hat normal damit nichts zu tun :D
Es ist dir also egal, dass deine App sich selbst abschießt ? :D
Das ist ne FATAL_EXCEPTION ...die App ist danach weg!

— geändert am 09.08.2012, 12:54:44

Antworten
asdf j.
  • Forum-Beiträge: 53

09.08.2012, 12:58:39 via Website

Es ist dir also egal, dass deine App sich selbst abschießt ?
nein egal ist es mir nicht aber ich erkenne ja schon beim debugen wo sie sich abschießt:
m_cdt = new CountDownTimer(30000,3000)
{
public void onTick(long millisUntilFinished)
{
Byte raus=1;
Byte rein=0;
try
{
dataoutputstream = new DataOutputStream(m_socket.getOutputStream());
dataoutputstream.writeUTF(""+raus);
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
try
{
datainputstream= new DataInputStream(m_socket.getInputStream());
rein=Byte.parseByte(datainputstream.readUTF());
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
if(rein!=1)
{
Toast.makeText(getApplicationContext(), "Keine Serververbindung", Toast.LENGTH_SHORT).show();
try
{
m_socket.close();
m_socket = new Socket("10.4.2.49",1025);
Toast.makeText(getApplicationContext(), "Serververbindung hergestellt", Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
Toast.makeText(getApplicationContext(), "Verbinden nicht möglich", Toast.LENGTH_SHORT).show();
}
}
else
{
Toast.makeText(getApplicationContext(),"Serverbindung hergestellt", Toast.LENGTH_SHORT).show();
}
}
public void onFinish()
{
this.start();
}

}.start();
}


in der 39. Zeile "m_socket = new Socket("10.4.2.49",1025);"
hat mit dem Button normal nichts zu tun :)

Antworten
Markus B.
  • Forum-Beiträge: 636

09.08.2012, 12:59:46 via Website

Philipp H.
ich möchte das Socket ja nicht schließen, ich brauche eine immer bestehende Serververbindung, desshalb hab ich kein close()
und das mit den nicht existierenden Button ist momentan egal, hat normal damit nichts zu tun :D
MfG

Du gehst an das ganze Thema falsch heran. Du kannst noch davon ausgehen das du IMMER eine Verbindung zum Server hast. Wenn die TCP Verbindung droped bekommst du es einfach Java-Seitig nicht mit. Dann kannst du nur versuchen mit dem Socket was zu machen und dann bekommst du einen Fehler. Eben auf diesen musst du reagieren und die Verbindung neu aufbauen. Es geht einfach nicht anderes.
Netzwerkprogrammierung macht man halt nicht einfach mal so .....

Antworten
André
  • Forum-Beiträge: 77

09.08.2012, 13:26:51 via Website

Ich würde dir empfehlen, dir erstmal etwas Wissen über das Programmieren mit Sockets anzulesen, bevor du das versuchst. Man bekommt tatsächlich den Eindruck, dass du dir das viel zu einfach vorstellst. Hier mal ein kleines Beispiel, wie so ein Netzwerk-Thread aussehen kann:

1do {
2 try {
3 <Establish a connection to the server>
4 } catch (SocketTimeoutException ste)
5 {
6 ...
7 } catch (Exception e)
8 {
9 ...
10 }
11
12 try {
13 do {
14 packet = NetworkPacket.readPacket(fromServer);
15 <Handle network packet>
16 } while ((!bExit) && (!bDisconnected));
17 } catch (EOFException e)
18 {
19 ... (Verbindungsabriss)
20 } catch (Exception e)
21 {
22 ...
23 }
24} while (!bExit);

Antworten
asdf j.
  • Forum-Beiträge: 53

09.08.2012, 13:39:52 via Website

Man bekommt tatsächlich den Eindruck, dass du dir das viel zu einfach vorstellst
das streite ich keinesfalls ab... denn von deinem Bespiel verstehe ich nur wenig,
aber ich habe immerhin eine Verbindung aufgebaut die Senden und Emfpangen ermöglichte.
Mein einziges Problem ist, die Wiederherstellung der Verbindung wenn die Verbindung einmal verloren geht.
Ich versuche es auch im moment mit der Methode die mir Markus B. vorgeschlagen hat.
MfG

Antworten
André
  • Forum-Beiträge: 77

09.08.2012, 13:51:42 via Website

Ich würde mal sagen, du versuchst von einem Socket zu lesen, der keine Verbindung mehr hat. Das war zumindest die letzte Fehlermeldung die du gepostet hast.

08-09 09:28:10.138: W/System.err(338): at java.io.DataInputStream.readUTF(DataInputStream.java:433)
08-09 09:28:10.138: W/System.err(338): at com.example.sockettest.MainActivity$1.onTick(MainActivity.java:78)

Als Reaktion auf diese Exception (die nichts anderes als Verbindungsabbruch aussagt) kannst du versuchen, die Verbindung neu aufzubauen. Hattest du das jetzt schon gemacht? Falls ja, was gab es dann für einen Fehler?

Antworten
Matteo Zmollnig
  • Forum-Beiträge: 51

09.08.2012, 13:56:02 via Website

Du Eierkopf verstehst sein Problem anscheinend nicht :D
Genau das is ja sein Problem!!!!
Lies lieber die Vorangegangenen Threads bevor du deinen Senf dazu gibst ^^

Antworten
asdf j.
  • Forum-Beiträge: 53

09.08.2012, 14:00:07 via Website

ich versuche schon die ganze zeit die Verbindung neu aufzubauen,
daran scheiterts ja die ganze Zeit :D

Matteo Zmollnig

Antworten
André
  • Forum-Beiträge: 77

09.08.2012, 14:13:15 via Website

Nein, es scheitert daran, dass ihr nicht in der Lage seid, die Fehlermeldungen rauszurücken.

Aber gut, wenn keine Hilfe gewünscht wird, dann eben nicht.

Antworten
Matteo Zmollnig
  • Forum-Beiträge: 51

09.08.2012, 14:17:49 via Website

Ich wiederhole:
hättest du den vorangegangenen Thread gelesen hättest du auch die Fehlermeldungen gesehen ;)

Antworten