Über Wifi mit dem PC kommunizieren

  • Antworten:6
J. T.
  • Forum-Beiträge: 6

30.03.2010, 12:23:49 via Website

Hallo Andorid-Entwickler,

ich habe seit ca. 2 Wochen mit der Androidprogrammierung begonnen und arbeite an einem
App, welche über WLAN mit einem PC Daten bzw. nur Strings austauschen können soll.
Wie kann ich sowas realisieren?
Hab schon mehrere Apps gesehen die es ermöglichen Dateien zwischen PC und Handy auszutauschen:
https://www.nextpit.de/de/android/tests/test/64586/aFile-Lite

Habe mir den WifiManager angesehen und in diversen Foren nach Beispielcode oder Tutorials gesucht, leider ohne Erfolg.

Wenn jemand Erfahrung mit meiner Problemstellung hat, dann wäre ich über Tipps und/oder Links sehr dankbar.

MFG J. Töpfer

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

30.03.2010, 17:03:02 via Website

Woran scheitert es denn jetzt ?
Die Daten kannst du senden sobald du eine Verbindung hast. Wifi oder WLAN ist dabei ja erstmal vollkommen egal!

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
J. T.
  • Forum-Beiträge: 6

30.03.2010, 17:17:00 via Website

Woran scheitert es denn jetzt ?
Der PC und das Handy sind per WLAN mit einer Fritz!Box verbunden.

Habe jetzt eine App die beim drücken auf einen Button einen String an den PC schicken soll.
Der PC soll den String empfangen und eine Rückmeldung an das Handy geben, vielleicht auch ein
String.

Ich weiß nicht so recht wie ich das übertragen des Strings realisieren soll?
Was muss ich dafür implementieren: Socket, Service,...?

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

30.03.2010, 17:56:46 via Website

Du benötigst auch auf dem PC irgendeine Form von Applikation die auf irgendeinem Port lauscht ...

Beispielsweise einen Webserver der auf Port 80 lauscht und Anfragen in gewisser Form entgegennimmt bzw. zurückliefert.

Ist nix anderes wie ein Chat wenn Du so willst. Im Grunde also eine Client Server Architektur auf Socket Basis.

Im Grunde ist das eine sogenannte Socket Verbindung. Ein Socket ist dabei der Port auf welchen die beiden Applikationen reagieren.

lg Voss

Antworten
J. T.
  • Forum-Beiträge: 6

31.03.2010, 12:18:31 via Website

Ich habe jetzt angefangen ein Socket zu programmieren und stoße da an einige Probleme:
-Wie rufe ich ein Service aus einer Activity auf?
-Brauche ich noch weitere Komponenten?
-Müssen Permissons im AndroidManifest.xml gesetzt werden?

Hier der Code:
Die Activity:
1public class ActivityTester extends Activity {
2
3 private TextView myText;
4 private Button myButton;
5
6 /** Called when the activity is first created. */
7 @Override
8 public void onCreate(Bundle savedInstanceState) {
9 super.onCreate(savedInstanceState);
10 setContentView(R.layout.test);
11 myText = (TextView) findViewById(R.id.test_text);
12 myButton = (Button) findViewById(R.id.test_button);
13
14 myButton.setOnClickListener(new View.OnClickListener() {
15 public void onClick(View view) {
16 //ClientSocket Service soll gestartet werden
17 }
18 });
19 }
20
21 private ServiceConnection svcConn = new ServiceConnection() {
22 @Override
23 public void onServiceConnected(ComponentName name, IBinder service) {
24 //Was muss hier rein?
25 }
26 @Override
27 public void onServiceDisconnected(ComponentName name) {
28 }
29 };
30
31}

Der Service:
1public class ClientSocket extends Service{
2
3 private static final String TAG = ClientSocket.class.getSimpleName();
4
5
6 ClientSocket() throws IOException {
7 Socket server = new Socket("IP des PCs", 1234);
8 InputStream input = server.getInputStream();
9 OutputStream output = server.getOutputStream();
10 output.write(5);
11 output.write(10);
12 output.flush();
13 System.out.println(input.read()); //Sollte an sich in der Activity myText zugewiesen werden
14 server.close();
15 input.close();
16 output.close();
17 }
18
19 public void onCreate() {
20 Log.d(TAG, "onCreate(): ClientSocket starten...");
21 try {
22 new ClientSocket();
23 } catch(IOException e) {
24 System.out.print(e);
25 }
26 }
27
28 @Override
29 public IBinder onBind(Intent arg0) {
30 Log.d(TAG, "onBind(): entered...");
31 return null;
32 }
33}

Und auf dem PC würde dieser JavaCode laufen:
1public class MyServerSocket {
2
3 ServerSocket server = new ServerSocket(1234);
4
5 MyServerSocket() throws IOException {
6 while(true) {
7 Socket client = server.accept();
8 InputStream input = client.getInputStream();
9 OutputStream output = client.getOutputStream();
10 int zahl1 = input.read();
11 int zahl2 = input.read();
12 System.out.println("zahl1:" + zahl1);
13 System.out.println("zahl2:" + zahl2);
14 output.write(zahl1 + zahl2);
15 output.flush();
16 input.close();
17 output.close();
18 }
19 }
20
21 public static void main(String[] args) {
22 try {
23 new MyServerSocket();
24 } catch(IOException e) {
25 System.out.println(e);
26 }
27 }
28
29}

Antworten
J. T.
  • Forum-Beiträge: 6

31.03.2010, 16:14:56 via Website

Habe was funktionierendes hinbekommen, hab alles in die Activity gepackt und kein Service dafür verwendet.

Bin ein Android-Anfänger, bitte deshalb um Verbesserungsvorschläge, Tipps, Fehlerhinweise...

Was die App macht:
Man kann einen Text in ein Textfeld eingeben, wenn man auf den sende Button drückt,
wird der Text an den Server geschickt, dieser antwortet indem er den empfangenen Text zurückschickt.

Permission für das AndoridManifest.xml:
1<uses-permission android:name="android.permission.INTERNET" />

Activity (Client):
1public class ActivityTester extends Activity {
2
3 private TextView myText;
4 private Button myButton;
5 private EditText myTextField;
6
7 /** Called when the activity is first created. */
8 @Override
9 public void onCreate(Bundle savedInstanceState) {
10 super.onCreate(savedInstanceState);
11 setContentView(R.layout.test);
12 myText = (TextView) findViewById(R.id.test_text);
13 myButton = (Button) findViewById(R.id.test_button);
14 myTextField = (EditText) findViewById(R.id.texteingabefeld);
15
16 myButton.setOnClickListener(new View.OnClickListener() {
17 public void onClick(View view) {
18 myText.setText("Button wurde gedrückt!");
19
20 if (myTextField.getText().toString().length() != 0) {
21 String aStr = myTextField.getText().toString();
22 try {
23 Socket server = new Socket("IP des PCs", 1234);
24 BufferedReader input = new BufferedReader(
25 new InputStreamReader(server.getInputStream()));
26 BufferedWriter output = new BufferedWriter(
27 new OutputStreamWriter(server.getOutputStream()));
28 output.write(aStr);
29 output.newLine();
30 output.flush();
31 myText.setText("Antwort vom Server: "
32 + input.readLine());
33 server.close();
34 input.close();
35 output.close();
36 } catch (IOException e) {
37 myText.setText(e.toString());
38 }
39 } else {
40 myText.setText("Bitte etwas eingeben!");
41 }
42 }
43 });
44 }
45}

PC-Applikation (Server):
1public class MyServerSocket {
2
3 ServerSocket server = new ServerSocket(1234);
4
5 MyServerSocket() throws IOException {
6 System.out.println("Server gestartet!");
7 while (true) {
8 Socket client = server.accept();
9 BufferedReader input = new BufferedReader(new InputStreamReader(
10 client.getInputStream()));
11
12 BufferedWriter output = new BufferedWriter(new OutputStreamWriter(
13 client.getOutputStream()));
14 String nachricht = input.readLine();
15 System.out.println("Nachricht vom Client: " + nachricht);
16 output.write(nachricht);
17 output.newLine();
18 output.flush();
19 input.close();
20 output.close();
21 }
22 }
23
24 public static void main(String[] args) {
25 try {
26 new MyServerSocket();
27 } catch (IOException e) {
28 System.out.println(e);
29 }
30 }
31}

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

01.04.2010, 11:02:35 via Website

Ein try/catch/finally wäre hier besser!

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten