返回
Android网络编程之TCP、UDP详解
Android
2023-09-09 05:08:35
Android网络编程
Android 网络编程主要是通过套接字来实现的。
- 套接字是两个程序在网络上进行通信时所使用的端点。
- 每个套接字都有一个唯一的标识符,称为套接字符。
TCP 和 UDP
- TCP(传输控制协议)是一种面向连接的协议,需要在两个应用程序之间建立连接。
- UDP(用户数据报协议)是一种无连接的协议,不需要在两个应用程序之间建立连接。
TCP
- TCP 协议是Android网络编程中使用最广泛的协议之一,主要用于在两个应用程序之间传输可靠的数据。
- TCP 协议提供了以下特性:
- 连接性 :TCP 连接是建立在客户端和服务器之间的,连接一旦建立,就可以在两个应用程序之间传输数据。
- 可靠性 :TCP 协议保证数据在传输过程中不会丢失或损坏。
- 顺序性 :TCP 协议保证数据按照发送的顺序接收。
- 流量控制 :TCP 协议提供流量控制机制,防止发送方发送数据太快,导致接收方无法处理。
UDP
- UDP 协议是Android网络编程中使用较少的协议,主要用于在两个应用程序之间传输不那么重要的数据。
- UDP 协议没有TCP协议那么可靠,它不保证数据在传输过程中不会丢失或损坏。
- UDP 协议没有连接性,它不需要在两个应用程序之间建立连接。
- UDP 协议没有顺序性,数据不按照发送的顺序接收。
- UDP 协议没有流量控制机制,发送方可以向接收方发送任意数量的数据。
代码实现
TCP客户端
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) throws IOException {
// 创建一个套接字
Socket socket = new Socket("localhost", 1234);
// 创建一个输出流
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());
// 写入数据
osw.write("Hello, world!");
// 关闭输出流
osw.close();
// 关闭套接字
socket.close();
}
}
TCP服务器
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) throws IOException {
// 创建一个套接字
ServerSocket serverSocket = new ServerSocket(1234);
// 等待客户端连接
Socket socket = serverSocket.accept();
// 创建一个输入流
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
// 读取数据
char[] buffer = new char[1024];
int len = isr.read(buffer);
// 打印数据
System.out.println(new String(buffer, 0, len));
// 关闭输入流
isr.close();
// 关闭套接字
socket.close();
// 关闭服务器套接字
serverSocket.close();
}
}
UDP客户端
import java.io.*;
import java.net.*;
public class UDPClient {
public static void main(String[] args) throws IOException {
// 创建一个套接字
DatagramSocket socket = new DatagramSocket();
// 创建一个数据包
byte[] data = "Hello, world!".getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("localhost"), 1234);
// 发送数据包
socket.send(packet);
// 关闭套接字
socket.close();
}
}
UDP服务器
import java.io.*;
import java.net.*;
public class UDPServer {
public static void main(String[] args) throws IOException {
// 创建一个套接字
DatagramSocket socket = new DatagramSocket(1234);
// 创建一个数据包
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
// 接收数据包
socket.receive(packet);
// 打印数据
System.out.println(new String(packet.getData(), 0, packet.getLength()));
// 关闭套接字
socket.close();
}
}