基于UDP协议的Socket通信相对于TCP而言更为简单,因为UDP是无连接的、无状态的通信协议。以下是一个基础入门的Android UDP通信的示例,包括UDP服务器端和UDP客户端。

UDP服务器端代码:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPServer {

    public static void main(String[] args) {
        DatagramSocket datagramSocket = null;

        try {
            // 创建UDP服务器端的Socket,监听指定端口
            datagramSocket = new DatagramSocket(9876);
            System.out.println("Server is listening on port 9876...");

            while (true) {
                // 接收客户端的数据
                byte[] receiveData = new byte[1024];
                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                datagramSocket.receive(receivePacket);

                String clientMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
                System.out.println("Received from client: " + clientMessage);

                // 这里可以进行对客户端数据的处理
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (datagramSocket != null && !datagramSocket.isClosed()) {
                datagramSocket.close();
            }
        }
    }
}

UDP客户端代码:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPClient {

    public static void main(String[] args) {
        DatagramSocket datagramSocket = null;

        try {
            // 创建UDP客户端的Socket
            datagramSocket = new DatagramSocket();

            // 服务器的IP地址和端口号
            InetAddress serverAddress = InetAddress.getByName("localhost");
            int serverPort = 9876;

            // 发送数据给服务器
            String sendData = "Hello, Server!";
            byte[] sendDataBytes = sendData.getBytes();
            DatagramPacket sendPacket = new DatagramPacket(sendDataBytes, sendDataBytes.length, serverAddress, serverPort);
            datagramSocket.send(sendPacket);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (datagramSocket != null && !datagramSocket.isClosed()) {
                datagramSocket.close();
            }
        }
    }
}

请注意,上述代码中的 "localhost" 部分应该替换为你实际使用的服务器的IP地址。UDP是无连接的,因此不需要像TCP那样建立连接和关闭连接。每个数据包都是独立的,不保证按顺序到达,也不保证可靠性。在实际应用中,你可能需要考虑数据包的丢失和重传等问题。

在Android中使用UDP通信的原理与上述Java示例类似。你可以将服务器端代码放入Java工程中,然后在Android客户端代码中进行调用。确保在AndroidManifest.xml文件中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />

这是一个基础入门的基于UDP协议的Socket通信的示例。在实际应用中,你可能需要更复杂的处理逻辑和异常处理。


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