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):
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:
package com.lakj.comspace.simpletextclient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.app.AlertDialog;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class SlimpleTextClientActivity extends Activity {
private Socket client;
private PrintWriter printwriter;
private EditText textField;
private Button button;
private Button button_connect;
private String messsage;
private Boolean connect;
private TextView textView;
public Socket getClient() {
return client;
}
public void setClient(Socket client) {
this.client = client;
}
public Boolean getConnect() {
return connect;
}
public void setConnect(Boolean connect) {
this.connect = connect;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_slimple_text_client);
connect = false;
textField = (EditText) findViewById(R.id.editText1); // reference to the text field
button = (Button) findViewById(R.id.button1); // reference to the send button
button_connect = (Button) findViewById(R.id.button2);
textView = (TextView) findViewById(R.id.textView1);
button_connect.setBackgroundColor(Color.RED);
button_connect.setText("nicht Verbunden");
// Button press event listener
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
SendMessage sendMessageTask = new SendMessage();
sendMessageTask.execute();
messsage = textField.getText().toString(); // get the text message on the text field
textField.setText(""); // Reset the text field to blank
BufferedReader in = null;
StringBuffer text = new StringBuffer();
try {
in = new BufferedReader(new InputStreamReader(getClient().getInputStream()));
String temp = null;
while ((temp = in.readLine()) != null) {
text.append(temp + "\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
textView.setText(text.toString()); // Dort kommt ein leerer String in das TextView
}
});
button_connect.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MyTask connectTask = new MyTask();
if (getConnect() != true){
button_connect.setText("Verbunden");
button_connect.setBackgroundColor(Color.GREEN);
connectTask.execute();
setConnect(true);
}
else{
button_connect.setText("nicht Verbunden");
button_connect.setBackgroundColor(Color.RED);
try {
connectTask.quit();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setConnect(false);
}
}
});
}
private class MyTask extends AsyncTask<Void, Void, Void>{
protected Void doInBackground(Void... params) {
try {
client = new Socket("192.168.1.14", 10001);
setClient(client);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // connect to the server
return null;
}
public void quit() throws IOException{
printwriter = new PrintWriter(getClient().getOutputStream(), true);
printwriter.write("quit"); // write the message to output stream
printwriter.flush();
printwriter.close();
getClient().close(); // closing the connection
}
}
private class SendMessage extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
printwriter = new PrintWriter(getClient().getOutputStream(), true);
printwriter.write(messsage); // write the message to output stream
printwriter.flush();
printwriter.close();
getClient().close(); // closing the connection
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.slimple_text_client, menu);
return true;
}
}