Dies ist meine erste Frage. Ich habe nach Lösungen für ähnliche Probleme gesucht, aber in jedem Fall gab es einige Unterschiede zu meinem Fall. Ich versuche, eine einfache Verbindung zwischen einem Python-Server und einer Android-Anwendung mit Sockets herzustellen. Die Android-App startet eine Konversation mit dem Server: Sie sendet eine Nachricht an den Server, der Server empfängt und zeigt sie an, dann sendet der Server eine Antwort an die App. Die App zeigt die Antwort auf dem Bildschirm in einer Textansicht an. Dies ist mein Code auf der Client-Seite:Verbindung zwischen Python-Server und Android-Anwendung
public class MyClient extends Activity implements OnClickListener{
EditText enterMessage;
Button sendbutton;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.myclient);
enterMessage = (EditText)findViewById(R.id.enterMessage);
sendbutton = (Button)findViewById(R.id.sendbutton);
sendbutton.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
Thread t = new Thread(){
@Override
public void run() {
try {
Socket s = new Socket("192.168.183.1", 7000);
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF(enterMessage.getText().toString());
//read input stream
DataInputStream dis2 = new DataInputStream(s.getInputStream());
InputStreamReader disR2 = new InputStreamReader(dis2);
BufferedReader br = new BufferedReader(disR2);//create a BufferReader object for input
//print the input to the application screen
final TextView receivedMsg = (TextView) findViewById(R.id.textView2);
receivedMsg.setText(br.toString());
dis2.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
};
t.start();
Toast.makeText(this, "The message has been sent", Toast.LENGTH_SHORT).show();
} }
Und auf der Serverseite dieser ist mein Code:
from socket import *
HOST = "192.168.183.1" #local host
PORT = 7000 #open port 7000 for connection
s = socket(AF_INET, SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1) #how many connections can it receive at one time
conn, addr = s.accept() #accept the connection
print "Connected by: " , addr #print the address of the person connected
while True:
data = conn.recv(1024) #how many bytes of data will the server receive
print "Received: ", repr(data)
reply = raw_input("Reply: ") #server's reply to the client
conn.sendall(reply)
conn.close()
Wenn ich versuche, eine Nachricht von der App mit dem Server funktioniert es perfekt zu schicken . Sobald der Server die Nachricht empfängt und anzeigt, wird die App sofort mit der folgenden Fehlermeldung beendet: unerwartet beendet. Bitte versuche es erneut. Zusätzliche Informationen: Ich benutze ADT-Bundle für Android-Entwicklung und IDLE, um den Server-Code auszuführen. Beide unter Windows8.