English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implementation simple de C basé sur socket en Android/Fonction de communication S

cet exemple décrit une implémentation simple de socket basé sur Android/Fonction de communication de chat. Partageons-le avec tout le monde pour que chacun puisse l'utiliser comme référence, voici les détails :

Idée principale : envoyer un message sur le client, ouvrir un thread en arrière-plan pour jouer le rôle du serveur, répondre immédiatement au client après avoir reçu un message.

Première étape : créez une classe SocketClientActity qui hérite de Activity, le paquet est com.pku.net

Écrivez le fichier de conception de l'interface socketclient.xml, le code est le suivant :

<?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="envoyer" >
  </Button>
</LinearLayout>

Ensuite, écrivez le fichier 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;
  /** Appelé lorsque l'activité est créée pour la première fois. */
  @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;
  }
}

Écrire le fichier 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>

Enfin, écrivez le fichier de service de serveur en arrière-plan SocketServerThread.java, le code suivant :

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();
    // Créez un serveur Socket
  }
  public void run() {
    Socket client;
    String txt;
    try {
      while (true)
      // Un cycle infini de thread, écoute en temps réel le port socket
      {
        client = ResponseSocket();
        // Répondez à la demande de connexion du client...
        while (true) {
          txt = ReceiveMsg(client);
          System.out.println(txt);
          // La connexion reçoit un message du client, le montrant sur l'écran du serveur
          SendMsg(client, txt);
          // Retournez un message au client
          if (true)
            break;
          // Interruptez et attendez la demande de connexion
        }
        CloseSocket(client);
        // Fermez cette connexion
      }
    } 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("Server starting..")
  }
  private Socket ResponseSocket() throws IOException {
    Socket client = server.accept();
    System.out.println("client connected..")
    return client;
  }
  private void CloseSocket(Socket socket) throws IOException {
    reader.close();
    writer.close();
    socket.close();
    System.out.println("client closed..")
  }
  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("server get input from client socket..")
    String txt = "Sever send:" + reader.readLine();
    return txt;
  }
 /*
  public static void main(final String args[]) throws IOException {
    SocketServerThread yaochatserver = new SocketServerThread();
    if (yaochatserver != null) {
      yaochatserver.start();
    }
  }  */
}

L'effet de exécution est illustré comme suit :

Pour plus d'informations sur Android, les lecteurs intéressés peuvent consulter les sujets spéciaux de ce site : "Résumé des modes de communication Android", "Tutoriel d'entrée et de niveau supérieur de développement Android", "Résumé des techniques de débogage et des solutions courantes aux problèmes Android", "Résumé des techniques d'opération multimédia Android (audio, vidéo, enregistrement, etc.), "Résumé des utilisations des composants de base Android", "Résumé des techniques View Android", "Résumé des techniques de layout Android" et "Résumé des utilisations des contrôles Android"

J'espère que ce qui est décrit dans cet article peut aider les développeurs Android.

Déclaration : le contenu de cet article est extrait du réseau, la propriété intellectuelle appartient aux auteurs respectifs, le contenu est contribué et téléversé par les utilisateurs d'Internet, ce site ne possède pas de propriété, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois confirmée, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)

Vous pourriez aussi aimer