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

C simples implementado com socket no Android/Função de comunicação S no chat

Este exemplo ilustra um simples C implementado em Android com base em socket./Funcionalidade de comunicação de chat. Compartilho com vocês para referência, conforme a seguir:

A principal ideia é enviar uma mensagem no cliente e abrir uma thread no background para atuar como servidor, devolvendo a mensagem imediatamente para o cliente.

Primeiro passo: crie uma classe SocketClientActity que herda Activity, o pacote é com.pku.net

Escreva o arquivo de layout socketclient.xml, o código é o seguinte:

<?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 seguir, escreva o arquivo 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;
  /** Chamado quando a atividade é criada pela primeira 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;
  }
}

Escrever o arquivo 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>

Finalmente, escreva o arquivo de serviço de servidor de fundo SocketServerThread.java, o código é o seguinte:

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();
    // Criar servidor Socket
  }
  public void run() {
    Socket client;
    String txt;
    try {
      while (true)
      // Loop infinito de thread, monitorando porta socket em tempo real
      {
        client = ResponseSocket();
        // Responder solicitação de conexão do cliente..
        while (true) {
          txt = ReceiveMsg(client);
          System.out.println(txt);
          // Conexão recebida mensagem do cliente, e mostrando na tela do Server
          SendMsg(client, txt);
          // Enviar mensagem ao cliente
          if (true)
            break;
          // Interromper, continuar esperando por solicitações de conexão
        }
        CloseSocket(client);
        // Fechar esta conexão
      }
    } 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("Servidor iniciando...");
  }
  private Socket ResponseSocket() throws IOException {
    Socket client = server.accept();
    System.out.println("Cliente conectado...");
    return client;
  }
  private void CloseSocket(Socket socket) throws IOException {
    reader.close();
    writer.close();
    socket.close();
    System.out.println("Cliente fechado...");
  }
  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("Servidor recebe entrada do socket do cliente...");
    String txt = "Servidor envia:" + reader.readLine();
    return txt;
  }
 /*
  public static void main(final String args[]) throws IOException {
    SocketServerThread yaochatserver = new SocketServerThread();
    if (yaochatserver != null) {
      yaochatserver.start();
    }
  }  */
}

O efeito de execução é mostrado na figura a seguir:

Leitores interessados em mais conteúdo sobre Android podem consultar a seção especial deste site: 'Resumo dos Módos de Comunicação do Android', 'Tutorial de Entrada e Avançado de Desenvolvimento de Android', 'Resumo de Técnicas de Depuração e Solução de Problemas Comuns do Android', 'Resumo de Técnicas de Manipulação de Multimídia do Android (áudio, vídeo, gravação, etc.)', 'Resumo de Uso dos Componentes Básicos do Android', 'Resumo de Técnicas de View do Android', 'Resumo de Técnicas de Layout do Android' e 'Resumo de Uso dos Controles do Android'.

Espero que o que é descrito neste artigo ajude a todos na programação de Android.

Declaração: O conteúdo deste artigo é proveniente da Internet, pertence ao autor original, foi uploaded voluntariamente pelos usuários da Internet, este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidades legais. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#w3Para denunciar, por favor, substitua # por @ no e-mail e forneça provas relevantes. Se confirmado, o conteúdo suspeito de infringência será removido imediatamente. Declare: O conteúdo deste artigo é proveniente da Internet, pertence ao autor original, foi uploaded voluntariamente pelos usuários da Internet, este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidades legais. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#w

Você também pode gostar