在继续讨论基于TCP协议的Socket通信的Android部分之前,请确保你已经了解并掌握了Android的基础知识,包括Activity、Thread、Permissions等方面。

Android客户端代码:

在Android应用中,网络操作不能在主线程中执行,因此需要使用异步任务(AsyncTask)或线程来执行。以下是一个简单的Android TCP客户端的例子:
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClientActivity extends AppCompatActivity {

    private static final String TAG = "TCPClientActivity";

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

        // 在异步任务中执行网络操作
        new ConnectToServerTask().execute();
    }

    private class ConnectToServerTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... voids) {
            try {
                // 创建客户端的Socket,连接服务器端
                Socket socket = new Socket("your_server_ip", 12345);

                // 获取输入流和输出流
                InputStream inputStream = socket.getInputStream();
                OutputStream outputStream = socket.getOutputStream();

                // 发送数据给服务器
                String requestData = "Hello, Server!";
                outputStream.write(requestData.getBytes());
                outputStream.flush();

                // 读取服务器的响应
                byte[] buffer = new byte[1024];
                int bytesRead = inputStream.read(buffer);
                final String responseData = new String(buffer, 0, bytesRead);

                // 在UI线程更新UI
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // 处理服务器响应,例如显示在TextView上
                        Log.d(TAG, "Received from server: " + responseData);
                    }
                });

                // 关闭与服务器的连接
                socket.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
}

请注意,上述代码中的 your_server_ip 部分应该替换为你实际使用的服务器的IP地址。

此外,确保在 AndroidManifest.xml 文件中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />

上述代码使用了AsyncTask来在后台线程中执行网络操作,并在UI线程更新UI。在实际应用中,你可能需要更复杂的线程管理、异常处理、UI更新等操作。

这是一个基本的基于TCP协议的Socket通信的Android客户端示例。在实际应用中,你可能需要根据具体需求进一步优化和扩展。


转载请注明出处:http://www.pingtaimeng.com/article/detail/15208/Android