Reno Krohmann
- Forum-Beiträge: 8
07.04.2011, 18:57:23 via Website
07.04.2011 18:57:23 via Website
Moin,
ich bin trotz tagelanger Suche in allen möglichen Foren keinen Schritt weiter gekommen. Ich habe folgendes Problem. Ich habe eine App geschrieben die regelmäßig bestimmte Informationen an einen Server schickt. Funktioniert hervorragend. Nun Antwortet der Server und will einen Nachricht an das Gerät schicken. Die Kommunikation funktioniert auch hervorragend. So lange ich in meinem eigenen Netzwerk bleibe.
Schalte ich WiFi aus und will über meinen Anbieter (Vodafone) kommunizieren kommen keinen Daten mehr an. Ich vermute, dass das Problem darin besteht, dass ich nicht weiß welcher Port gerade frei gegeben ist. Ein Portscan ergibt, dass mindestens ein Port immer frei ist es ist. Bei jedem an / ab Melden ist es aber ein anderer Port. So weiß ich also nicht auf welchem Port ich lauschen soll. Ich habe folgende Klasse zum Empfang von UDP - Pakages geschrieben:
Ich habe 1000 verschiedene Möglichkeiten mit dem DatagramSocket ausprobiert. Ich muss ja nicht unbedingt IP und Port angeben dann nimmt er jeden freien Port der da ist. Leider bekomme ich dann auch keine Antwort. Ich suche also einen Weg wie ich herausfinden kann welcher Port denn nun gerade der freie Port ist den Vodafone mir zugewiesen hat.
Ich hoffe ich habe mich halbwegs verständlich ausdrücken können. Hat jemand ne Idee wie ich den offenen Port schnell finden kann?
Vielen Dank
Reno
ich bin trotz tagelanger Suche in allen möglichen Foren keinen Schritt weiter gekommen. Ich habe folgendes Problem. Ich habe eine App geschrieben die regelmäßig bestimmte Informationen an einen Server schickt. Funktioniert hervorragend. Nun Antwortet der Server und will einen Nachricht an das Gerät schicken. Die Kommunikation funktioniert auch hervorragend. So lange ich in meinem eigenen Netzwerk bleibe.
Schalte ich WiFi aus und will über meinen Anbieter (Vodafone) kommunizieren kommen keinen Daten mehr an. Ich vermute, dass das Problem darin besteht, dass ich nicht weiß welcher Port gerade frei gegeben ist. Ein Portscan ergibt, dass mindestens ein Port immer frei ist es ist. Bei jedem an / ab Melden ist es aber ein anderer Port. So weiß ich also nicht auf welchem Port ich lauschen soll. Ich habe folgende Klasse zum Empfang von UDP - Pakages geschrieben:
1public class UDPListener extends Thread {
2
3 private static Context con;
4
5 DatagramSocket socket;
6 boolean alive = true;
7 byte[] buffer = new byte[1064];
8 private DatagramPacket packet;
9 private final static int SERVERPORT = 10159;
10 private final static InetAddress SERVERIP = getLocalIpAdress();
11 private static boolean active = false;
12
13
14 public UDPListener(Context c) {
15 con = c;
16 setActive(true);
17 try {
18 packet = new DatagramPacket(buffer, buffer.length);
19 socket = new DatagramSocket(SERVERPORT, SERVERIP);
20 } catch (IOException ex) {
21 throw new RuntimeException("Creating datagram reflector failed", ex);
22 }
23 // Toast.makeText(con, "UDPListener started on IP:" + SERVERIP,
24 // Toast.LENGTH_SHORT).show();
25 DataHelper dhelp = new DataHelper(con);
26 dhelp.insert("MyOwnIP= " + SERVERIP, "msg_out");
27 dhelp.close();
28 }
29
30 @Override
31 public void run() {
32 try {
33 while (alive) {
34 try {
35 packet.setLength(buffer.length);
36 socket.receive(packet);
37 String s = stringFromPacket(packet);
38 DataHelper dhelp = new DataHelper(con);
39 dhelp.insert(s.trim(), "msg_out");
40 dhelp.close();
41 try {
42 Thread.sleep(100);
43 } catch (InterruptedException ex) {
44 // Ignore.
45 }
46
47 Log.v("UDP", "comes" + s);
48 } catch (java.io.InterruptedIOException e) {
49 }
50 }
51 } catch (java.io.IOException ex) {
52 ex.printStackTrace();
53 } finally {
54 socket.close();
55 }
56 }
57.......
58}
2
3 private static Context con;
4
5 DatagramSocket socket;
6 boolean alive = true;
7 byte[] buffer = new byte[1064];
8 private DatagramPacket packet;
9 private final static int SERVERPORT = 10159;
10 private final static InetAddress SERVERIP = getLocalIpAdress();
11 private static boolean active = false;
12
13
14 public UDPListener(Context c) {
15 con = c;
16 setActive(true);
17 try {
18 packet = new DatagramPacket(buffer, buffer.length);
19 socket = new DatagramSocket(SERVERPORT, SERVERIP);
20 } catch (IOException ex) {
21 throw new RuntimeException("Creating datagram reflector failed", ex);
22 }
23 // Toast.makeText(con, "UDPListener started on IP:" + SERVERIP,
24 // Toast.LENGTH_SHORT).show();
25 DataHelper dhelp = new DataHelper(con);
26 dhelp.insert("MyOwnIP= " + SERVERIP, "msg_out");
27 dhelp.close();
28 }
29
30 @Override
31 public void run() {
32 try {
33 while (alive) {
34 try {
35 packet.setLength(buffer.length);
36 socket.receive(packet);
37 String s = stringFromPacket(packet);
38 DataHelper dhelp = new DataHelper(con);
39 dhelp.insert(s.trim(), "msg_out");
40 dhelp.close();
41 try {
42 Thread.sleep(100);
43 } catch (InterruptedException ex) {
44 // Ignore.
45 }
46
47 Log.v("UDP", "comes" + s);
48 } catch (java.io.InterruptedIOException e) {
49 }
50 }
51 } catch (java.io.IOException ex) {
52 ex.printStackTrace();
53 } finally {
54 socket.close();
55 }
56 }
57.......
58}
Ich habe 1000 verschiedene Möglichkeiten mit dem DatagramSocket ausprobiert. Ich muss ja nicht unbedingt IP und Port angeben dann nimmt er jeden freien Port der da ist. Leider bekomme ich dann auch keine Antwort. Ich suche also einen Weg wie ich herausfinden kann welcher Port denn nun gerade der freie Port ist den Vodafone mir zugewiesen hat.
Ich hoffe ich habe mich halbwegs verständlich ausdrücken können. Hat jemand ne Idee wie ich den offenen Port schnell finden kann?
Vielen Dank
Reno
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.