¿Cómo obtener datos desde / hacia un socket en un hilo?

Android noob aquí. Aprendo lo mejor viendo el código fuente de un ejemplo funcional, pero no he podido encontrar un ejemplo sencillo pero completo de usar un socket en su propio subproceso.

Tengo un servicio de Android que necesita comunicarse con Internet. Quiero abrir un socket TCP que se conecta a un servidor en Internet. El servicio necesita enviar datos a Internet, y los datos que regresan de la red tendrán que ir al servicio. Puesto que el servicio está haciendo otras cosas también, la conexión del zócalo necesita vivir en su propio hilo de rosca.

¿Alguna idea de dónde podría encontrar un ejemplo de un zócalo en un hilo con la comunicación a / desde el zócalo?

Gracias

Introduzca aquí la descripción de la imagen

Sólo tiene que crear una tarea asíncrona que se comunique en segundo plano y, a continuación, actualiza el hilo de la interfaz de usuario según sea necesario. Aquí está el hilo de fondo para obtener información de un socket y actualizar una vista de texto con el número de bytes que recibe

public class InternetTask extends AsyncTask<Void, Integer, Void> { private WeakReference<TextView> mUpdateView; public LoginTask(TextView view) { this.mUpdateView = new WeakReference<TextView>(view); } @Override protected Void doInBackground() { try { Socket socket = new Socket("127.0.0.1", 80); InputStream is = socket.getInputStream(); byte[] buffer = new byte[25]; int read = is.read(buffer); while(read != -1){ publishProgress(read); read = is.read(buffer); } is.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } } @Override protected void onProgressUpdate(Integer... values) { if(mUpdateView.get() != null && values.length > 0){ mUpdateView.get().setText(values[0].toString()); } } } 

Y aquí está cómo usted lanzaría ese hilo fuera

 public class TestTab extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.someLayout); TextView textView = (TextView)findViewById(R.id.someid); InternetTask task = new InternetTask(textView); task.execute(); } } 

Aquí hay un blog largo sobre este tema, donde tanto el servidor y las partes del cliente se muestran, con la comunicación del zócalo pasando por un hilo separado.

http://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/

Una cosa a tener en cuenta es que si usted está pasando int s se puede ejecutar en un problema de orden de bytes, por lo que, sólo hacer algunas pruebas y le sugiero que asegúrese de que el servidor envía en el formato que el Android necesita, en el caso Tiene servidores en más de un sistema operativo.

Para una manera simple, en el Android para encontrar el orden de bytes puede utilizar esto: http://developer.android.com/reference/java/nio/ByteOrder.html

Según este artículo, la orden de los bytes puede intercambiarse para la optimización: http://en.wikipedia.org/wiki/Dalvik_(software)

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.