mercredi 29 avril 2015

C# Server - Android Client

Hallo liebes Forum,

ich hatte mich vor Jahren schonmal mit Java und Android auseinandergesetzt, aber das ist leider schon wieder in Vergessenheit geraten. In letzter Zeit habe ich mich hauptsächlich mit C# und Java befasst.

Nun zu meinem Problem.

Ich habe eine C# Serverapplikation am Laufen, mit der der Android Client per WLAN kommunizieren soll. Das ist alles kein Problem. Ich kann Verbindungen aufbauen und schließen. Das Senden von Nachrichten an den Server ist auch kein Problem. Die Antwort wird vom Server gesendet, aber der Client kann Sie nicht einlesen.

Ich habe bei einem C#-Client geschaut und wollte dies so übernehmen - natürlich nicht 1 zu 1 -, musste aber aufgrund der Fehlenden Java-Kenntnisse passen.

Hier mal mein Code (er ist sehr unaufgeräumt und bestimmt noch optimierbar - aber bin schon froh, dass es so klappt):

Java Code:

  1.  
  2. package com.lakj.comspace.simpletextclient;
  3.  
  4. import java.io.BufferedReader;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.InputStreamReader;
  8. import java.io.PrintWriter;
  9. import java.net.Socket;
  10. import java.net.UnknownHostException;
  11.  
  12. import android.app.Activity;
  13. import android.app.AlertDialog;
  14. import android.graphics.Color;
  15. import android.os.AsyncTask;
  16. import android.os.Bundle;
  17. import android.view.Menu;
  18. import android.view.View;
  19. import android.widget.Button;
  20. import android.widget.EditText;
  21. import android.widget.TextView;
  22.  
  23. public class SlimpleTextClientActivity extends Activity {
  24.  
  25. private Socket client;
  26. private PrintWriter printwriter;
  27. private EditText textField;
  28. private Button button;
  29. private Button button_connect;
  30. private String messsage;
  31. private Boolean connect;
  32. private TextView textView;
  33.  
  34. public Socket getClient() {
  35. return client;
  36. }
  37.  
  38. public void setClient(Socket client) {
  39. this.client = client;
  40. }
  41.  
  42. public Boolean getConnect() {
  43. return connect;
  44. }
  45.  
  46. public void setConnect(Boolean connect) {
  47. this.connect = connect;
  48. }
  49.  
  50. @Override
  51. protected void onCreate(Bundle savedInstanceState) {
  52. super.onCreate(savedInstanceState);
  53. setContentView(R.layout.activity_slimple_text_client);
  54.  
  55. connect = false;
  56.  
  57. textField = (EditText) findViewById(R.id.editText1); // reference to the text field
  58. button = (Button) findViewById(R.id.button1); // reference to the send button
  59. button_connect = (Button) findViewById(R.id.button2);
  60. textView = (TextView) findViewById(R.id.textView1);
  61.  
  62.  
  63. button_connect.setBackgroundColor(Color.RED);
  64. button_connect.setText("nicht Verbunden");
  65.  
  66. // Button press event listener
  67. button.setOnClickListener(new View.OnClickListener() {
  68.  
  69. public void onClick(View v) {
  70. SendMessage sendMessageTask = new SendMessage();
  71. sendMessageTask.execute();
  72. messsage = textField.getText().toString(); // get the text message on the text field
  73. textField.setText(""); // Reset the text field to blank
  74.  
  75. BufferedReader in = null;
  76. try {
  77. in = new BufferedReader(new InputStreamReader(getClient().getInputStream()));
  78. String temp = null;
  79.  
  80. while ((temp = in.readLine()) != null) {
  81. text.append(temp + "\n");
  82. }
  83. } catch (IOException e) {
  84. // TODO Auto-generated catch block
  85. e.printStackTrace();
  86. }
  87. textView.setText(text.toString()); // Dort kommt ein leerer String in das TextView
  88. }
  89. });
  90.  
  91. button_connect.setOnClickListener(new View.OnClickListener() {
  92.  
  93. public void onClick(View v) {
  94.  
  95. MyTask connectTask = new MyTask();
  96. if (getConnect() != true){
  97. button_connect.setText("Verbunden");
  98. button_connect.setBackgroundColor(Color.GREEN);
  99. connectTask.execute();
  100. setConnect(true);
  101. }
  102. else{
  103. button_connect.setText("nicht Verbunden");
  104. button_connect.setBackgroundColor(Color.RED);
  105. try {
  106. connectTask.quit();
  107. } catch (IOException e) {
  108. // TODO Auto-generated catch block
  109. e.printStackTrace();
  110. }
  111. setConnect(false);
  112. }
  113. }
  114. });
  115. }
  116.  
  117. private class MyTask extends AsyncTask<Void, Void, Void>{
  118.  
  119. protected Void doInBackground(Void... params) {
  120. try {
  121. client = new Socket("192.168.1.14", 10001);
  122. setClient(client);
  123.  
  124. } catch (UnknownHostException e) {
  125. // TODO Auto-generated catch block
  126. e.printStackTrace();
  127. } catch (IOException e) {
  128. // TODO Auto-generated catch block
  129. e.printStackTrace();
  130. } // connect to the server
  131. return null;
  132. }
  133.  
  134. public void quit() throws IOException{
  135.  
  136. printwriter = new PrintWriter(getClient().getOutputStream(), true);
  137. printwriter.write("quit"); // write the message to output stream
  138.  
  139. printwriter.flush();
  140. printwriter.close();
  141.  
  142.  
  143. getClient().close(); // closing the connection
  144. }
  145. }
  146.  
  147. private class SendMessage extends AsyncTask<Void, Void, Void> {
  148.  
  149. @Override
  150. protected Void doInBackground(Void... params) {
  151. try {
  152.  
  153. printwriter = new PrintWriter(getClient().getOutputStream(), true);
  154. printwriter.write(messsage); // write the message to output stream
  155.  
  156. printwriter.flush();
  157. printwriter.close();
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164. getClient().close(); // closing the connection
  165.  
  166. } catch (UnknownHostException e) {
  167. e.printStackTrace();
  168. } catch (IOException e) {
  169. e.printStackTrace();
  170. }
  171. return null;
  172. }
  173.  
  174. }
  175.  
  176. @Override
  177. public boolean onCreateOptionsMenu(Menu menu) {
  178. // Inflate the menu; this adds items to the action bar if it is present.
  179. getMenuInflater().inflate(R.menu.slimple_text_client, menu);
  180. return true;
  181. }
  182.  
  183. }


C# Server - Android Client

0 commentaires:

Enregistrer un commentaire