Netzwerkzugriff mit java.net

  • Antworten:13
  • Bentwortet
Stehpan Graf
  • Forum-Beiträge: 26

01.01.2014, 17:16:10 via Website

Frohes Neues!
Ich möchte eine Socketverbindung zwischen einem Android Gerät und einem anderen Gerät in meinem Heimnetzwerk aufbauen. Dazu benutze ich die Klasse java.net.Socket und java.net.ServerSocket. Das Android Gerät ist der Client.

Dies ist der relevante Quellcode (in einer von AsyncTask abgeleiteten Klasse):

1protected String doInBackground(Void... args) {
2 String message = "";
3 try {
4 InetAddress ip = InetAddress.getByName("192.168.3.50"); //ip des Servers
5 Socket clientSock = new Socket(ip,8888);
6 .......



Das Programm hängt an dem Versuch sich mit dem Server zu verbinden. Ich hab den gleichen Code auf meinem Windows Rechner laufen lassen, und da funktioniert es problemlos.

Als Permissions hab ich gesetzt:
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE

Was muss ich machen, um das Programm auf Android zum laufen zu bringen?

— geändert am 01.01.2014, 17:21:18

Antworten
Stehpan Graf
  • Forum-Beiträge: 26

01.01.2014, 17:46:05 via Website

Geht einfach nicht weiter. Sucht anscheinend den Server, oder es fehlt die Berechtigung.

Antworten
Stehpan Graf
  • Forum-Beiträge: 26

01.01.2014, 18:08:34 via App

Ich habe es mittels Log.d() festgestellt (vor und nach Aufruf) . Die erste Nachricht habe ich erhalten. Die zweite dann nicht. Das erzeugen eines Objekts von Socket läuft so ab, dass es erzeugt wird (bzw der Konstruktor beendet), wenn es "Zugriff" auf den Server bekommt. Da sowohl IP, als auch port, über einstimmen, muss das Android system den Zugriff blockieren. es muss also eine permission fehlen, oder irgendetwas anderes. ich hab mal bei einer APP vergessen die permission zu setzten und sie ist nicht abgestürzt, sondern es ist nicht dass passiert, was passieren sollte.

Antworten
Fabian Simon
  • Forum-Beiträge: 359

02.01.2014, 08:34:55 via Website

Hallo,
schreibt er keine Fehlermeldung ins Log ?
Oder greift es nur dein Catch ab und dehalb läuft es weiter.
Du weißt ja: e.printStackTrace ist bei Android nicht so hilfreich....
Lass doch mal das ermitteln der Inetadresse weg....
So:
1Socket so = new Socket("192.168.3.50",8080);
Und geh mal mim Debugger durch.

Normaler weise sollte er, wenn er keine Verbindung aufbauen kann eine Timeout Exception schmeißen.

Gruß
Fabian

Antworten
Stehpan Graf
  • Forum-Beiträge: 26

02.01.2014, 11:52:53 via App

Hab tatsächlich die exception abgefangen, aber nicht richtig weiterverarbeitet. bekomme eine ConnectException( message:
failed to connect /192.168.3.50 (port 8888)).
Sowohl Server als auch Android gerät sind im Netz. Kann es an der kompabilität liegen.(auf dem Server läuft Debian)?

Antworten
Fabian Simon
  • Forum-Beiträge: 359

02.01.2014, 11:56:26 via Website

Auf keinen Fall.
Ner Socketverbindung interessiert nicht was für ein Betriebsystem drunter steckt.
Lade dir mal einen Port Scanner auf dein Handy und jage es auf den Server los.
Dann siehst ob ne antwort kommt.... und unter welchem Port usw...

Antworten
Stehpan Graf
  • Forum-Beiträge: 26

02.01.2014, 12:50:32 via App

port kann ich ja und eine Antwort bekomme ich (zumindest auf meinem Windows PC), die Serversoftware Funktioniert also. das Android system muss also die APP hindern auf den Server zuzugreifen. ich brauch irgendeine permission oder etwas anderes.

Antworten
Fabian Simon
  • Forum-Beiträge: 359

02.01.2014, 13:18:38 via Website

Ludy
Probiere mal 8080 oder 80 als Port.
Er nutzt doch den Port 8080.
Und das Ziel System ist Debian....

@Stehpan Graf:

Ja genau des halb teste es mal über eine Andere Application von dem Selben gerät ob ein Verbindungsaufbau möglich ist....
Zu den Permissions:
Normalerweiße reicht die android.permission.INTERNET um eine Verbindung aufzubauen.
Versuch mal über eine Portscanner:
z.B.: https://play.google.com/store/apps/details?id=com.twistandroid.portscan

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.958

02.01.2014, 13:20:14 via App

Fabian Simon
Ludy
Probiere mal 8080 oder 80 als Port.
Er nutzt doch den Port 8080.
Und das Ziel System ist Debian....

@Stehpan Graf:

Ja genau des halb teste es mal über eine Andere Application von dem Selben gerät ob ein Verbindungsaufbau möglich ist....
Zu den Permissions:
Normalerweiße reicht die android.permission.INTERNET um eine Verbindung aufzubauen.
Versuch mal über eine Portscanner:
z.B.: https://play.google.com/store/apps/details?id=com.twistandroid.portscan

macht er nicht er nutzt 8888

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Stehpan Graf
  • Forum-Beiträge: 26

02.01.2014, 15:18:21 via App

mit portscanner funktioniert es.

Antworten
Stehpan Graf
  • Forum-Beiträge: 26

02.01.2014, 15:25:01 via App

Keine Ahnung, was los war. ich hab die permissions entfernt und nochmal gesetzt. jetzt funktioniert es!
THX
LG

Antworten