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

تحقيق وظيفة إرسال واستقبال رسائل بسيطة باستخدام socket في Android

هذه المقالة توضح كيفية تنفيذ وظيفة الاتصال البسيط للرسائل بين C/S باستخدام socket في Android. نتشاركها معكم للاستفادة منها، وفقًا للتالي:

الفكرة الرئيسية: إرسال رسالة على الجهاز الكlient، وتشغيل سطر عمل في الخلفية يمثل الخادم، وإعادة إرسال الرسالة إلى الجهاز الكlient عند استقبالها.

الخطوة الأولى: إنشاء فئة 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;
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.socketclient);
    try {
      yaochatserver = جديد SocketServerThread();
    } catch (IOException e) {
      // TODO مكتوب آليًا بلوحةالتقاطع
      e.printStackTrace();
    }
    if (yaochatserver != null) {
      yaochatserver.start();
    }
    ايجادرؤية();
    ضبطنقر();
  }
  خاصية EditText chattxt;
  خاصية TextView chattxt2;
  خاصية Button chatok;
  العمومية void ايجادرؤية() {
    chattxt = (EditText) هذا.findViewById(R.id.chattxt);
    chattxt2 = (TextView) هذا.findViewById(R.id.chattxt2);
    chatok = (Button) هذا.findViewById(R.id.chatOk);
  }
  خاصية void ضبطنقر() {
    chatok.setOnClickListener(new View.OnClickListener() {
      @Override
      العمومية void النقرعلى(رؤية v) {
        try {
          الاتصالبالخادم(هذا.chattxt.getText().toString());
        } تمسك (UnknownHostException e) {
          // TODO مكتوب آليًا بلوحةالتقاطع
          e.printStackTrace();
        } catch (IOException e) {
          // TODO مكتوب آليًا بلوحةالتقاطع
          e.printStackTrace();
        }
      }
    });
  }
  العمومية void الاتصالبالخادم(بياناتسوكيت) يبدأ بناء UnknownHostException,
      IOException {
    سوكيت سوكيت = طلبسوكيت("127.0.0.1"، 5000);
    إرسالرسالة(سوكيت، بياناتسوكيت);
    الخط النصي txt = استقبالرسالة(سوكيت);
    هذا.chattxt2.setText(txt);
  }
  خاصية سوكيت طلبسوكيت(مزود، بورتفوليو)
      يبدأ بناء UnknownHostException، IOException {
    سوكيت سوكيت = جديد سوكيت(مزود، بورتفوليو);
    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"، "تحليل تقنيات التشغيل للنماذج View في Android"، "تحليل تقنيات التشغيل للنماذج layout في Android"، و "تحليل استخدام العناصر التحكم في Android".

نتمنى أن تكون هذه المقالة قد ساعدتكم في تصميم برامج Android.

بيان: محتويات هذا المقال تم جمعها من الإنترنت، حقوق النشر مملوكة للمساهمين في الإنترنت، تم إدراج المحتوى بشكل تلقائي من قبل المستخدمين، هذا الموقع لا يمتلك حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي، ولا يتحمل أي مسؤولية قانونية متعلقة بذلك. إذا كنت قد وجدت محتوى يشتبه في انتهاك حقوق النسخ، فيرجى إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) لتقديم الشكوى، وتقديم الأدلة ذات الصلة، إذا تم التحقق من صحة الشكوى، سيتم حذف المحتوى المزعوم فوراً.

أنت قد تحب