Android App 通过 WiFi 和上位机通信

随着智能手机的普及,Android 应用开发成为了一个热门领域。在某些应用场景中,Android App 需要与上位机进行通信,以实现数据的传输和控制。本文将介绍如何通过 WiFi 让 Android App 与上位机进行通信,并提供一些代码示例。

通信原理

在大多数情况下,Android App 与上位机的通信是通过 TCP/IP 协议实现的。Android App 作为客户端,上位机作为服务器,两者之间建立一个 TCP 连接,通过这个连接进行数据的发送和接收。

通信流程

  1. 服务器端:上位机作为服务器,需要开启一个 TCP 服务,监听客户端的连接请求。
  2. 客户端:Android App 作为客户端,需要连接到服务器的 IP 地址和端口号。
  3. 数据传输:一旦连接建立,客户端和服务器就可以通过 TCP 连接发送和接收数据。

代码示例

以下是一个简单的 Android App 与上位机通信的代码示例。

服务器端(Java)

import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(1234);
        System.out.println("Server is listening...");

        while (true) {
            Socket socket = serverSocket.accept();
            System.out.println("Connected: " + socket);

            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            OutputStream out = socket.getOutputStream();

            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                System.out.println("Received: " + inputLine);
                out.write(("Echo: " + inputLine).getBytes());
            }

            socket.close();
        }
    }
}

客户端(Android)

import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;

import java.io.*;
import java.net.*;

public class MainActivity extends AppCompatActivity {
    private EditText editText;
    private Button sendButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);
        sendButton = findViewById(R.id.sendButton);
        sendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new SendDataTask().execute(editText.getText().toString());
            }
        });
    }

    private class SendDataTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... params) {
            try {
                Socket socket = new Socket("192.168.1.100", 1234);
                OutputStream out = socket.getOutputStream();
                out.write(params[0].getBytes());

                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String response = in.readLine();
                socket.close();
                return response;
            } catch (UnknownHostException e) {
                return "Error: " + e.getMessage();
            } catch (IOException e) {
                return "Error: " + e.getMessage();
            }
        }

        @Override
        protected void onPostExecute(String result) {
            editText.append("\n" + result);
        }
    }
}

类图

以下是 Android App 中 MainActivity 类的类图。

classDiagram
    class MainActivity {
        +EditText editText
        +Button sendButton
        +void onCreate(Bundle savedInstanceState)
        +private class SendDataTask
    }
    class SendDataTask {
        -String doInBackground(String... params)
        -void onPostExecute(String result)
    }

结语

通过本文的介绍和代码示例,相信读者已经对 Android App 通过 WiFi 和上位机通信有了一定的了解。在实际开发过程中,可以根据具体需求进行相应的调整和优化。希望本文对您有所帮助。