Socket

  • Antworten:61
  • OffenNicht stickyNicht beantwortet
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Forum-Beiträge: 53

08.08.2012, 09:24:46 via Website

ein TCP-Server mit diesem Hercules Setup utility
MfG

Antworten
  • 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
  • Forum-Beiträge: 2.243

08.08.2012, 10:42:36 via Website

Android ist ein Linux-basiertes System.
Unter Linux ist es nur Prozessen, die mit dem root-User laufen erlaubt Server-Sockets zu öffnen, die Ports unter 1024 haben.
Alle Ports unter 1024 sind für Systemdienste reserviert.

Antworten
  • 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
  • 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

Empfohlene Artikel