English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Este artículo muestra un ejemplo de implementación simple de socket en Android./Función de comunicación de chat. Comparto con todos para referencia, como se muestra a continuación:
La idea principal: envíe un mensaje en el cliente y abra un hilo en segundo plano como el servidor, devuelva el mensaje al cliente inmediatamente después de recibirlo.
Paso 1: Cree una clase SocketClientActity que hereda de Activity, el paquete es com.pku.net
Escriba el archivo de diseño socketclient.xml, el código es el siguiente:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ScrollView android:id="@"+id/scrollview3" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@"+id/chattxt2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#"98F5FF" /> </ScrollView> <EditText android:id="@"+id/chattxt" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:id="@"+id/chatOk" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="enviar" > </Button> </LinearLayout>
A continuación, escriba el archivo SocketClientActity.Java:
package com.pku.net; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.net.UnknownHostException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.*; public class SocketClientActivity extends Activity { SocketServerThread yaochatserver; /** Llamado cuando la actividad se crea por primera vez. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.socketclient); try { yaochatserver = new SocketServerThread(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (yaochatserver != null) { yaochatserver.start(); } findviews(); setonclick(); } private EditText chattxt; private TextView chattxt2; private Button chatok; public void findviews() { chattxt = (EditText) this.findViewById(R.id.chattxt); chattxt2 = (TextView) this.findViewById(R.id.chattxt2); chatok = (Button) this.findViewById(R.id.chatOk); } private void setonclick() { chatok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { connecttoserver(chattxt.getText().toString()); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } public void connecttoserver(String socketData) throws UnknownHostException, IOException { Socket socket = RequestSocket("127.0.0.1", 5000); SendMsg(socket, socketData); String txt = ReceiveMsg(socket); this.chattxt2.setText(txt); } private Socket RequestSocket(String host, int port)}} throws UnknownHostException, IOException { Socket socket = new Socket(host, port); return socket; } private void SendMsg(Socket socket, String msg) throws IOException { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( socket.getOutputStream())); writer.write(msg.replace("\n", " ") + "\n"); writer.flush(); } private String ReceiveMsg(Socket socket) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader( socket.getInputStream())); String txt = reader.readLine(); return txt; } }
Escribir el archivo AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android package="com.pku.net" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.INTERNET"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".HttpURLActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN"> /> <category android:name="android.intent.category.LAUNCHER"> /> </intent-filter> </activity> <activity android:name="GetNetImage"></activity> <activity android:name="HttpClientActivity"></activity> <activity android:name="SocketClientActivity"></activity> </application> </manifest>
finalizar la escritura del archivo de servicio de fondo del servidor SocketServerThread.java, el código es el siguiente:
package com.pku.net; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class SocketServerThread extends Thread { public SocketServerThread() throws IOException { CreateSocket(); // crear un servidor Socket } public void run() { Socket client; String txt; try { while (true) // un bucle de hilo infinito, monitoreando en tiempo real el puerto socket { client = ResponseSocket(); // responder a la solicitud de conexión del cliente... while (true) { txt = ReceiveMsg(client); System.out.println(txt); // obtener un mensaje del cliente y mostrarlo en la pantalla del servidor SendMsg(client, txt); // enviar un mensaje al cliente if (true) break; // interrumpir, continuar esperando solicitudes de conexión } CloseSocket(client); // cerrar esta conexión } } catch (IOException e) { System.out.println(e); } } private ServerSocket server = null; private static final int PORT = 5000; private BufferedWriter writer; private BufferedReader reader; private void CreateSocket() throws IOException { server = new ServerSocket(PORT, 100); System.out.println("El servidor está iniciando..."); } private Socket ResponseSocket() throws IOException { Socket client = server.accept(); System.out.println("El cliente se conectó..."); return client; } private void CloseSocket(Socket socket) throws IOException { reader.close(); writer.close(); socket.close(); System.out.println("El cliente se cerró..."); } private void SendMsg(Socket socket, String Msg) throws IOException { writer = new BufferedWriter(new OutputStreamWriter( socket.getOutputStream())); writer.write(Msg + "\n"); writer.flush(); } private String ReceiveMsg(Socket socket) throws IOException { reader = new BufferedReader(new InputStreamReader( socket.getInputStream())); System.out.println("El servidor recibe entrada desde el socket del cliente..."); String txt = "El servidor envía:" + reader.readLine(); return txt; } /* public static void main(final String args[]) throws IOException { SocketServerThread yaochatserver = new SocketServerThread(); if (yaochatserver != null) { yaochatserver.start(); } } */ }
El efecto de ejecución se muestra en la imagen siguiente:
Los lectores interesados en más contenido relacionado con Android pueden ver la sección especial de este sitio: 'Resumen de métodos de comunicación de Android', 'Tutoriales de introducción y avanzado de desarrollo de Android', 'Resumen de técnicas de depuración y métodos de solución de problemas comunes de Android', 'Resumen de técnicas de operaciones multimedia de Android (audio, video, grabación, etc.)', 'Resumen de uso de componentes básicos de Android', 'Resumen de técnicas de View de Android', 'Resumen de técnicas de layout de Android' y 'Resumen de uso de controles de Android'.
Espero que lo descrito en este artículo pueda ayudar a todos en el diseño de programas Android.
Declaración: El contenido de este artículo se obtiene de la red, pertenece a los derechos de autor del propietario, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente y no asume ninguna responsabilidad legal. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @) para denunciar, y proporcione evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.