Android App 通过 WiFi 和上位机通信
随着智能手机的普及,Android 应用开发成为了一个热门领域。在某些应用场景中,Android App 需要与上位机进行通信,以实现数据的传输和控制。本文将介绍如何通过 WiFi 让 Android App 与上位机进行通信,并提供一些代码示例。
通信原理
在大多数情况下,Android App 与上位机的通信是通过 TCP/IP 协议实现的。Android App 作为客户端,上位机作为服务器,两者之间建立一个 TCP 连接,通过这个连接进行数据的发送和接收。
通信流程
- 服务器端:上位机作为服务器,需要开启一个 TCP 服务,监听客户端的连接请求。
- 客户端:Android App 作为客户端,需要连接到服务器的 IP 地址和端口号。
- 数据传输:一旦连接建立,客户端和服务器就可以通过 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 和上位机通信有了一定的了解。在实际开发过程中,可以根据具体需求进行相应的调整和优化。希望本文对您有所帮助。