android wifi通信
时间: 2023-10-18 18:06:09 浏览: 142
Android中的WiFi通信可以通过WiFi Direct或者Socket实现。
1. WiFi Direct通信
WiFi Direct是一种点对点的无线网络连接技术,可以直接在两个设备之间创建连接,不需要使用中介设备。在Android中,可以使用WifiP2pManager API来管理WiFi Direct连接。以下是一个简单的WiFi Direct通信示例:
(1)在AndroidManifest.xml文件中添加以下权限:
```
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
```
(2)创建WiFi Direct连接
```
WifiP2pManager wifiP2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
WifiP2pManager.Channel channel = wifiP2pManager.initialize(this, getMainLooper(), null);
wifiP2pManager.discoverPeers(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
// 发现Peers成功
}
@Override
public void onFailure(int reason) {
// 发现Peers失败
}
});
```
(3)连接到其他设备
```
private WifiP2pManager.ConnectionInfoListener connectionListener = new WifiP2pManager.ConnectionInfoListener() {
@Override
public void onConnectionInfoAvailable(WifiP2pInfo info) {
if (info.groupFormed && info.isGroupOwner) {
// 作为group owner处理连接
} else if (info.groupFormed) {
// 作为client处理连接
}
}
};
wifiP2pManager.connect(channel, config, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
// 连接成功
}
@Override
public void onFailure(int reason) {
// 连接失败
}
});
```
2. Socket通信
Socket是一种通用的网络通信协议,可以在不同的网络之间进行通信。在Android中,可以使用Socket实现WiFi通信。以下是一个简单的Socket通信示例:
(1)在AndroidManifest.xml文件中添加以下权限:
```
<uses-permission android:name="android.permission.INTERNET" />
```
(2)创建Socket连接
```
String host = "192.168.1.100";
int port = 12345;
Socket socket = new Socket(host, port);
```
(3)发送和接收数据
```
OutputStream outputStream = socket.getOutputStream();
outputStream.write("Hello, World!".getBytes());
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
String message = new String(buffer, 0, len);
```
阅读全文