[Java/Python] Android und Raspberry über UDP/TCP kommunzieren lassen

06/12/2014 21:46 Klickboy#1
Quote:
EDIT:
Oh man, das ist mir jetz peinlich: Das Problem saß vor dem Computer. Hier ist kein Bedarf mehr, Code funktioniert so wie er soll.



Hallo zusammen :)

Ich wollte via Java eine Apk schreiben welche mit meinem Raspberry Pi kommuniziert.

Ich hatte Mir dazu erstmal einige Tutorials in Python zu UDP und TCP angeguckt.
Anschließend hab ich mir das gleiche nochmal für Android angetan.

Wenn ich nun mit Python einen Clienten und einen Server nutze.
kommunizieren die beiden so wie gewollt.

Das gleiche auch bei Android, wenn ich eine ClientApk und eine ServerApk mach, kommunizieren die beiden wie verlangt.


Mein Problem ist nun:
Ich möchte mit einem Apk-Clienten etwas an den Python_Server schicken.
Aber irgendwie funktionierts einfach nicht.

Java-Client(Quelle: javacodegeeks.com):
Code:
package com.javacodegeeks.android.androidsocketclient;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class Client extends Activity {

	private Socket socket;

	private static final int SERVERPORT = 50000;
	private static final String SERVER_IP = "192.168.1.21";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);		

		new Thread(new ClientThread()).start();
	}

	public void onClick(View view) {
		try {
			EditText et = (EditText) findViewById(R.id.EditText01);
			String str = et.getText().toString();
			PrintWriter out = new PrintWriter(new BufferedWriter(
					new OutputStreamWriter(socket.getOutputStream())),
					true);
			out.println(str);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	class ClientThread implements Runnable {

		@Override
		public void run() {

			try {
				InetAddress serverAddr = InetAddress.getByName(SERVER_IP);

				socket = new Socket(serverAddr, SERVERPORT);

			} catch (UnknownHostException e1) {
				e1.printStackTrace();
			} catch (IOException e1) {
				e1.printStackTrace();
			}

		}

	}
}

Und der Python-Server (Quelle: wiki.python.org)


Code:
#!/usr/bin/env python

import socket

TCP_IP = ''
TCP_PORT = 50000
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print ('Connection address:', addr)
while True:
   data = conn.recv(BUFFER_SIZE)
   if not data: break
   print ("received data:", data.decode('utf-8'))
   conn.send("ist angekommen!".encode('utf-8'))  # echo
conn.close()

Liegt es daran das der Server eine Codierte Nachricht erwartet ?
Oder benutzt das apk gar kein TCP sondern ein anderes Protokoll ?