English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Данный пример рассказывает о реализации простого C/S chat communication на Android с использованием socket. Предлагается к вашему рассмотрению, подробности см. ниже:
Основная идея: отправка сообщения на клиенте,开辟一个线程充当服务器端,при получении сообщения моментально ответить клиенту.
Шаг 1: Создайте класс SocketClientActity, наследующий Activity, в пакете com.pku.net
Создание файла разметки socketclient.xml, код следующий:
<?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="отправить" > </Button> </LinearLayout>
В следующем разделе пишем файл 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; /** Вызвано при первом создании активности. */ @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;} } }
Составление файла 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>
В конце пишем файл фонового сервера SocketServerThread.java с кодом, как показано ниже:
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(); // Создание socket сервера } public void run() { Socket client; String txt; try { while (true) // бесконечный цикл потока, постоянное прослушивание порта socket { client = ResponseSocket(); // 响онный клиентский запрос на соединение... while (true) { txt = ReceiveMsg(client); System.out.println(txt); // 链接获得客户端发来消息,并将其显示在Server端的屏幕上 SendMsg(client, txt); // 向客户端返回消息 if (true) break; // 中断,继续等待链接请求 } CloseSocket(client); // 关闭此次链接 } } 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(); } } }
Результат выполнения показан на рисунке ниже:
Читатели, заинтересованные в более подробной информации о Android, могут ознакомиться с нашими статьями: «Обзор методов связи Android», «Введение и продвинутый учебник по разработке Android», «Сборник приемов отладки и решений常见ых проблем Android», «Сборник приемов работы с мультимедийными данными Android (аудио, видео, запись и т.д.)», «Сборник приемов использования основных компонентов Android», «Сборник приемов использования виджетов View Android», «Сборник приемов использования макетов layout Android» и «Сборник приемов использования контроллеров Android».
Надеюсь, что информация, изложенная в этой статье, поможет вам в разработке Android-приложений.
Заявление: содержимое статьи взято из Интернета, авторские права принадлежат соответствующему автору, контент предоставлен пользователями Интернета в добровольном порядке, сайт не обладает правами собственности, не underwent редактирование人工, также не несет ответственности за соответствующие юридические вопросы. Если вы обнаружите содержимое,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении, и предоставьте соответствующие доказательства, после проверки, сайт немедленно удалил涉嫌侵权的内容。