免责声明

易百易数码科技

安卓socket通信机制_通信

文章目录


安卓socket通信机制基于TCP/IP协议,通过创建Socket对象实现客户端与服务器端的数据交互和通信。

安卓socket通信机制_通信

Socket简介

Socket是一种网络通信的编程接口,用于实现不同主机之间的数据传输,在安卓中,可以使用Java的Socket类来实现Socket通信。

安卓socket通信机制_通信-图1

Socket通信流程

1、建立连接:客户端通过Socket类创建一个Socket对象,并指定服务器的IP地址和端口号,然后调用connect()方法与服务器建立连接。

2、发送数据:连接建立后,客户端可以通过Socket对象的输出流OutputStream发送数据到服务器端。

3、接收数据:服务器端通过Socket对象的输入流InputStream接收客户端发送的数据。

4、关闭连接:数据传输完成后,客户端和服务器端分别关闭Socket对象和相关的输入输出流。

Socket通信示例代码

以下是一个简单的安卓Socket通信示例代码:

服务器端代码:

import java.io.*;
import java.net.*;
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888); // 创建服务器端的Socket对象,监听8888端口
        System.out.println("服务器已启动...");
        Socket socket = serverSocket.accept(); // 等待客户端连接,并返回一个Socket对象
        System.out.println("客户端已连接...");
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 获取客户端发送的数据
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // 向客户端发送数据
        String message;
        while ((message = in.readLine()) != null) { // 读取客户端发送的数据,直到为空
            System.out.println("收到客户端消息:" + message);
            out.println("服务器已收到消息:" + message); // 向客户端发送确认消息
        }
        in.close();
        out.close();
        socket.close(); // 关闭Socket对象和相关流
        serverSocket.close(); // 关闭服务器端的ServerSocket对象
    }
}

客户端代码:

安卓socket通信机制_通信-图2
import java.io.*;
import java.net.*;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.TextView;
import android.widget.Button;
import android.view.View;
import android.widget.Toast;
public class Client extends AppCompatActivity {
    private Button btnSend;
    private TextView tvReceived;
    private Socket socket;
    private PrintWriter out;
    private BufferedReader in;
    private String serverIP = "192.168.1.100"; // 服务器IP地址,根据实际情况修改
    private int serverPort = 8888; // 服务器端口号,根据实际情况修改
    private final String MESSAGE = "Hello, Server!"; // 要发送的消息内容,根据实际情况修改
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_client); // 设置布局文件,根据实际情况修改
        btnSend = findViewById(R.id.btnSend); // 获取发送按钮的引用,根据实际情况修改
        tvReceived = findViewById(R.id.tvReceived); // 获取接收消息的文本框的引用,根据实际情况修改
        try {
            socket = new Socket(serverIP, serverPort); // 创建客户端的Socket对象,连接到服务器端
            out = new PrintWriter(socket.getOutputStream(), true); // 获取输出流,用于向服务器端发送数据
            in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 获取输入流,用于接收服务器端发送的数据
            btnSend.setOnClickListener(new View.OnClickListener() { // 设置发送按钮的点击事件监听器
                @Override
                public void onClick(View v) {
                    try {
                        out.println(MESSAGE); // 向服务器端发送消息
                        String response = in.readLine(); // 读取服务器端返回的消息,直到为空或超时(这里没有设置超时时间)
                        if (response != null) { // 如果收到服务器端的响应消息,显示在文本框中并弹出提示信息框
                            tvReceived.setText(response);
                            Toast.makeText(Client.this, "收到服务器响应:" + response, Toast.LENGTH_SHORT).show();
                        } else { // 如果未收到服务器端的响应消息,显示提示信息框并关闭连接和流对象等资源释放操作(这里没有设置超时时间)
                            Toast.makeText(Client.this, "未收到服务器响应", Toast.LENGTH_SHORT).show();
                            in.close();
                            out.close();
                            socket.close();
                        }
                    } catch (IOException e) { // 如果发生IO异常,显示错误信息并关闭连接和流对象等资源释放操作(这里没有设置超时时间)
                        e.printStackTrace();
                        Toast.makeText(Client.this, "发生IO异常:" + e.getMessage(), Toast.LENGTH_SHORT).show();
                        in.close();
                        out.close();
                        socket.close();
                    } finally { } // 确保资源释放操作执行完毕(这里没有设置超时时间)
                }
            });
        } catch (UnknownHostException e) { // 如果发生未知主机异常,显示错误信息并退出程序(这里没有设置超时时间)
            e.printStackTrace();
            Toast.makeText(Client.this, "未知主机异常:" + e.getMessage(), Toast.LENGTH_SHORT).show();
            finish(); // 退出程序,结束运行状态(这里没有设置超时时间)
        } catch (IOException e) { // 如果发生IO异常,显示错误信息并退出程序(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里没有设置超时时间)e(这里与本文相关的问题与解答:问题1:如何在安卓中使用Socket进行通信?答案:在安卓中使用Java的Socket类可以实现Socket通信,首先需要创建一个Socket对象,并指定服务器的IP地址和端口号,然后调用connect()方法与服务器建立连接,连接建立后,可以通过Socket对象的输出流OutputStream发送数据到服务器端,服务器端通过Socket对象的输入流InputStream接收客户端发送的数据,数据传输完成后,客户端和服务器端分别关闭Socket对象和相关的输入输出流,问题2:如何实现一个简单的安卓Socket通信示例?答案:可以参考上述给出的安卓Socket通信示例代码,在Android Studio中创建一个新的项目,并在项目中添加相应的布局文件和Activity类,在Activity类中编写代码实现客户端和服务器端的交互逻辑,运行程序后,可以在客户端界面上点击发送按钮向服务器端发送消息,并接收服务器端的响应消息显示在文本框中。
安卓socket通信机制_通信-图3
分享:
扫描分享到社交APP
上一篇
下一篇