Bidirektionale Verbindung für das Senden von Strings zwischen Android und Linux Rechner

  • Antworten:0
Hans Meier
  • Forum-Beiträge: 1

10.11.2010, 15:31:04 via Website

Hallo

Ich will eine bidirektionale Verbindung zwischen einem Single-Board-Computer auf dem Voyage Linux läuft und einem Android Smartphone realisieren. Dabei sollen einfache Strings ausgetauscht werden. Das Senden funktioniert bereits problemlos über einen Socket (siehe Code). Beim Empfangen will es einfach nicht hauen. Ich habe einen Thread gemacht, welcher das GUI immer aktualisiert und die empfangenen Strings auf dem Bildschirm darstellt. Beim ersten mal starten des APPs funktioniert alles problemlos. Wenn ich jedoch den close Butten betätige und das APP wieder starten will, geht es nicht mehr und bleibt beim kreieren des Server Socket hängen (Zeile 39). Ich vermute es liegt am Socket welcher nicht richtig geschlossen wird. Kann mir jemand weiterhelfen? Vielleicht gibt es auch einfachere Möglichkeiten Strings auszutauschen. Ich wäre um Anregungen dementsprechend sehr dankbar!

Gruss
Buell24


1public class ThreadTest extends Activity implements Runnable {
2
3 //private Send send;
4 public final String IPADDRESS = "127.0.0.1"; //for testing: 127.0.0.1, SBC: 10.1.20.1
5 public final int PORT=4444;
6 private ProgressDialog pd;
7 public TextView entryField;
8 public TextView outputText;
9 public TextView outBernina;
10 private String s="init";
11 private Thread thread = new Thread(this);
12 private ServerSocket serverSocket;
13 private Socket client;
14 private boolean sendingProcess=false;
15
16
17 /** Called when the activity is first created. */
18 @Override
19 public void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 setContentView(R.layout.main);
22 entryField=(TextView)this.findViewById(R.id.input);
23 outputText=(TextView)this.findViewById(R.id.output);
24 outBernina=(TextView)this.findViewById(R.id.outBernina);
25
26 // Show process dialog
27 pd = ProgressDialog.show(this, "Willkommen bei Bernina", "Warten auf Antwort der Nähmaschine", true, false);
28
29 // Start the thread
30 thread.start();
31 }
32 //Daten Empfangen von Single Board Computer
33 //-------------------------------------------------------------------
34 public void run() {
35
36 try {
37 Log.d("TCP", "S: Connecting...");
38 //entryField.setText("run thread");
39 serverSocket = new ServerSocket(4444);
40 client = serverSocket.accept();
41 while (true) {
42 handler.sendEmptyMessage(0);
43
44 Log.d("TCP", "S: Receiving...");
45 //outputText.append("Receiving");
46 try {
47 BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
48 s = in.readLine();
49 Log.d("TCP", "S: Received: '" + s + "'");
50 } catch(Exception e) {
51 Log.e("TCP", "S: Error", e);
52 //entryField.setText("S: Error");
53 } finally {
54 //client.close();
55 Log.d("TCP", "S: Done.");
56 }
57 }
58 } catch (Exception e) {
59 Log.e("TCP", "S: Error", e);
60 }
61 }
62
63 private Handler handler = new Handler() {
64 @Override
65 public void handleMessage(Message msg) {
66 // Hide dialog
67 pd.dismiss();
68
69 // Set the text
70 outBernina.setText(s);
71 }
72 };
73 //-------------------------------------------------------------------
74
75 public void testPressed(View target) {
76
77 if (sendingProcess) { Log.e("Thread","Es ist bereits ein Sende-Vorgang im Gange"); }
78 else {
79 //sendingProcess=true;
80 //send.sendMessage("hallo");
81 //sendingProcess=false;
82 try {
83 Log.d("TCP", "C: Connecting to "+IPADDRESS);
84 Socket socket = new Socket(IPADDRESS, PORT);
85 try {
86 Log.d("TCP", "C: Sending: '" + entryField.getText() + "'");
87 PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
88 out.println(entryField.getText());
89 Log.d("TCP", "C: Sent.");
90 outputText.setText("Text erfolgreich gesendet an "+IPADDRESS+":"+PORT);
91 }
92 catch(Exception e) {
93 Log.e("TCP", "S: Error", e);
94 }
95 finally {
96 Log.d("TCP", "Closing socket...");
97 socket.close();
98 }
99 }
100 catch (Exception e) {
101 outputText.setText("Fehler beim Senden!");
102 Log.e("TCP", "C: Error", e);
103 }
104 entryField.setText("");
105 sendingProcess=false;
106 }
107 }
108
109 public void closePressed(View target) {
110 try {
111 finish();
112 } catch (Exception e) {
113 // TODO Auto-generated catch block
114 Log.e("STATUS", "closePressed",e);
115 }
116 }
117
118
119 public void onPause(Bundle savedInstanceState) {
120 Log.e("STATUS", "onPause");
121 }
122
123 public void onStop(Bundle savedInstanceState) {
124 Log.e("STATUS", "onStop");
125 try {
126 client.close();
127 } catch (IOException e) {
128 // TODO Auto-generated catch block
129 e.printStackTrace();
130 }
131 thread.stop();
132 finish();
133 super.onStop();
134 }
135
136
137 public void onDestroy(Bundle savedInstanceState) {
138 Log.e("STATUS", "onDestroy");
139 try {
140 client.close();
141 } catch (IOException e) {
142 // TODO Auto-generated catch block
143 e.printStackTrace();
144 }
145 thread.stop();
146 finish();
147 }
148 }

Antworten