hola
Estoy tratando de crear un cliente-servidor entre un celular android y linux en PC, ya logré hacer la conexión, puedo mandar y recibir datos o en este caso, "cadenas de texto", tal vez estoy muy acostumbrado a C, pero como recordaran, con una conexión ya realizada se puede empezar a comunicar los sockets.
Bueno, ya logre esa comunicación, pero no se si funcione de la misma manera con Java, hasta el momento hago la conexión y mando un "hola" de android a la PC, y después mando alguna frase de la PC a android, pero aquí viene mi problema.
Al principio había dejado un botón y un textview para ver si se estaba realizando la conexión y la información se mandaba correctamente, y todo va bien, oprimo el botón para mandar un string desde android a la PC y después puedo volver a recibir otra cadena de caracteres desde la compu hacia android, etc, el clásico recv y send.
Pero como mencioné, tengo que oprimir un botón para poder mandar datos constantemente desde android a la PC y asi lograr mandar datos desde la PC a android nuevamente, y me gustaría poder mandar y recibir datos sin tener que oprimir nada en el celular.
Por ejemplo, me gustaría que cuando la aplicación en andriod se inicie, me mande una frase de "conexion aceptada", después yo mandar un frase de "hola", y android me mande otra cosa y así continuamente hasta que se termine la conexión. Para eso necesito saber como mantener la conexión activa y android reciba y mande información sin oprimir algo.
Traté de quitar el listener del botón y poner el socket en onCreate directamente, pero se detiene la aplicación, lo que quiere decir que así no funciona, ¿alguien me podría decir como realizar esa función, mantener la conexión activa y poder interactuar automáticamente con android?
Les dejo el código que encontré, lo he estado estudiando y modificando varias cosas para entender las cosas. A ver si me pueden explicar como realizar lo que necesito o como podría hacerlo de otra manera
package com.clint;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
EditText textOut;
TextView textIn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textOut = (EditText)findViewById(R.id.textout);
Button buttonSend = (Button)findViewById(R.id.send);
textIn = (TextView)findViewById(R.id.textin);
buttonSend.setOnClickListener(buttonSendOnClickListener);
}
Button.OnClickListener buttonSendOnClickListener = new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Socket socket = null;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;
try {
socket = new Socket("192.168.0.17", 8888);
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream.writeUTF("hola");
textIn.setText(dataInputStream.readUTF());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if (socket != null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (dataOutputStream != null){
try {
dataOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (dataInputStream != null){
try {
dataInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}};
}