Socket

  • Antworten:61
  • OffenNicht stickyNicht beantwortet

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 :)

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 .....

!!! BAZINGA !!!

Aktuelle Artikel aus unserem Magazin

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);

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

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?

09.08.2012 14:20:34 via Website

So. Und dann kannst du jetzt meinen Post oben lesen, der dir erklärt, warum dein Code diesen Fehler erzeugt, und wie du vorgehen kannst, um ihn zu beheben.

Du hast bis jetzt nicht mal Ansätze deiner Lösung, geschweige denn Probleme beschrieben, sondern nur "geht nicht".

Und @Matteo deine schwachsinnigen Kommentare kannst du dir sparen.

— geändert am 09.08.2012 14:21:19

09.08.2012 14:24:38 via Website

ja das mit der Exception, dass die Verbindung unterbrochen wurde ist durchaus logisch, weil ich den Server ausgeschaltet habe um zu Testen wie das Programm reagiert.
und wie oben erwähnt arbeite ich an der Lösung die mir vorgeschlagen wurde, in dem Fall den Socket zu schließen und dann eine "sauberen" Socket wieder zu starten
MfG

09.08.2012 14:35:42 via Website

Und @Matteo deine schwachsinnigen Kommentare kannst du dir sparen.

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?
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.


Wer im Glashaus sitzt........ ;)

09.08.2012 16:10:12 via Website

Matteo Zmollnig
Das Problem besteht übrigens noch weiterhin und es darf weiter Diskutiert werden ;)

Es wurde alles gesagt. Jetzt streng Eure Köpfe mal ein bisschen selber an und lest euch Wissen an.
Das sind alles so Grundlegende Probleme ...
Wenn Ihr morgen immer noch vor den Wand steht lade ich euch Beispiel-Code hoch.

Gruß,
Markus

!!! BAZINGA !!!