harmony 鸿蒙P2P Mode Development Guide
P2P Mode Development Guide
Introduction
The peer-to-peer (P2P) mode provides a point-to-point connection between devices in a WLAN. It allows a TCP/IP connection to be set up between two stations (STAs) without an access point (AP).
When to Use
You can use the APIs provided by the wifiManager module to:
- Create or remove a P2P group.
- Set up a P2P connection.
Available APIs
For details about the JavaScript APIs and sample code, see the P2P API Reference.
The following table describes the APIs used in this topic.
| API | Description | 
|---|---|
| createGroup() | Creates a P2P group. | 
| removeGroup() | Removes a P2P group. | 
| startDiscoverDevices() | Starts to discover devices. | 
| getP2pPeerDevices() | Obtains the P2P peer device list. | 
| p2pConnect() | Sets up a P2P connection. | 
| getP2pLinkedInfo() | Obtains P2P connection information. | 
| on(type: ‘p2pPersistentGroupChange’) | Subscribes to P2P persistent group state changes. | 
| off(type: ‘p2pPersistentGroupChange’) | Unsubscribes from P2P persistent group state changes. | 
| on(type: ‘p2pPeerDeviceChange’) | Subscribes to P2P peer device state changes. | 
| off(type: ‘p2pPeerDeviceChange’) | Unsubscribes from P2P peer device state changes. | 
| on(type: ‘p2pConnectionChange’) | Subscribes to P2P connection state changes. | 
| off(type: ‘p2pConnectionChange’) | Unsubscribes from P2P connection state changes. | 
How to Develop
Creating or Removing a P2P Group
- Import the wifiManager module.
- Enable Wi-Fi on the device.
- Check that the device has the SystemCapability.Communication.WiFi.P2P capability.
- Create or remove a P2P group.
- Example:
import { wifiManager } from '@kit.ConnectivityKit';
// Create a P2P group. To use the current device as the group owner (GO), set:
// netId: The value -1 means to create a temporary P2P group. When a device in the group is to be connected next time, GO negotiation and WPS key negotiation must be performed again.
// The value -2 means to create a persistent group. The device in the group can be reconnected without GO negotiation or WPS key negotiation.
let recvP2pPersistentGroupChangeFunc = () => {
	console.info("p2p persistent group change receive event");
  
	// Services to be processed after the persistent group is created.
}
// Create a persistent group, and register a listener callback for the persistent group status changes.
wifiManager.on("p2pPersistentGroupChange", recvP2pPersistentGroupChangeFunc);
try {
	let config:wifiManager.WifiP2PConfig = {
		deviceAddress: "00:11:22:33:44:55",
		deviceAddressType: 1,
		netId: -2,
		passphrase: "12345678",
		groupName: "testGroup",
		goBand: 0
	}
	wifiManager.createGroup(config);	
}catch(error){
	console.error("failed:" + JSON.stringify(error));
}
    
// Remove a P2P group.
try {
	wifiManager.removeGroup();	
}catch(error){
	console.error("failed:" + JSON.stringify(error));
}
- For details about error codes, see Wi-Fi Error Codes.
Creating a P2P Connection
- Import the wifiManager module.
- Enable Wi-Fi on the device.
- Check that the device has the SystemCapability.Communication.WiFi.P2P capability.
- Register a callback for p2pPeerDeviceChange and set up a P2P connection in the callback implementation.
- Start P2P device discovery.
- Example:
import { wifiManager } from '@kit.ConnectivityKit';
  
let recvP2pConnectionChangeFunc = (result:wifiManager.WifiP2pLinkedInfo) => {
	console.info("p2p connection change receive event: " + JSON.stringify(result));
	wifiManager.getP2pLinkedInfo((err, data) => {
		if (err) {
			console.error("failed to get P2pLinkedInfo: " + JSON.stringify(err));
			return;
		}
		console.info("get getP2pLinkedInfo: " + JSON.stringify(data));
		// Add the service processing logic after a successful or failed P2P connection.
	});
}
// After the P2P connection is set up, the callback for p2pConnectionChange will be called.
wifiManager.on("p2pConnectionChange", recvP2pConnectionChangeFunc);
  
let recvP2pPeerDeviceChangeFunc = (result:wifiManager.WifiP2pDevice[]) => {
	console.info("p2p peer device change receive event: " + JSON.stringify(result));
	wifiManager.getP2pPeerDevices((err, data) => {
		if (err) {
			console.error("failed to get peer devices: " + JSON.stringify(err));
			return;
		}
		console.info("get peer devices: " + JSON.stringify(data));
		let len = data.length;
		for (let i = 0; i < len; ++i) {
			// Select the peer P2P device that meets the conditions.
			if (data[i].deviceName === "my_test_device") {
				console.info("p2p connect to test device: " + data[i].deviceAddress);
				let config:wifiManager.WifiP2PConfig = {
					deviceAddress:data[i].deviceAddress,
					deviceAddressType: 1,
					netId:-2,
					passphrase:"",
					groupName:"",
					goBand:0,
				}
				// Set up a P2P connection. The GO cannot initiate connections.
				wifiManager.p2pConnect(config);
			}
		}
	});
}
// The callback for p2pPeerDeviceChange will be called when the P2P scanning result is reported.
wifiManager.on("p2pPeerDeviceChange", recvP2pPeerDeviceChangeFunc);
  
setTimeout(() => {wifiManager.off("p2pConnectionChange", recvP2pConnectionChangeFunc);}, 125 * 1000);
setTimeout(() =>  {wifiManager.off("p2pPeerDeviceChange", recvP2pPeerDeviceChangeFunc);}, 125 * 1000);
// Start to discover P2P devices, that is, start P2P scanning.
console.info("start discover devices -> " + wifiManager.startDiscoverDevices());
- For details about error codes, see Wi-Fi Error Codes.
你可能感兴趣的鸿蒙文章
                        
                            0
                        
                        
                             赞
                        
                    
                    
                - 所属分类: 后端技术
- 本文标签:
热门推荐
- 
                        2、 - 优质文章
- 
                        3、 gate.io
- 
                        8、 openharmony
- 
                        9、 golang