Secure connection API
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Sau khi phát hiện một thiết bị từ xa, hàm handleIntent
được gọi và
đã đến lúc bắt đầu truyền dữ liệu giữa các ứng dụng. Phần này đề cập đến
bốn bước cần thiết để duy trì kết nối an toàn:
- Đang mở kết nối
- Chấp nhận kết nối
- Gửi và nhận dữ liệu
- Đóng kết nối
Mở một kết nối
Để mở kết nối nhằm nhận dữ liệu từ một thiết bị từ xa, hãy sử dụng
đối tượng người tham gia đã nhận trước đó và chỉ định CHANNEL_NAME
:
Kotlin
participant
.openConnection(CHANNEL_HELLO)
.onFailure { /* handle failure */}
.getOrNull()
?.let { connection ->
connection.send("Hello, world".toByteArray(UTF_8)).onFailure { /* handle failure */}
}
Java
public void openConnection(Participant participant) {
Futures.addCallback(
participant.openConnectionFuture(CHANNEL_HELLO),
new FutureCallback<RemoteConnection>() {
@Override
public void onSuccess(RemoteConnection remoteConnection) {
// use remoteConnection object to pass data, e.g.:
sendDataToRemoteConnection(remoteConnection);
}
@Override
public void onFailure(Throwable t) {
// handle error opening a remote connection
}
},
mainExecutor);
}
private void sendDataToRemoteConnection(RemoteConnection remoteConnection) {
Futures.addCallback(
remoteConnection.sendFuture("Hello, world".getBytes()),
new FutureCallback<Void>() {
@Override
public void onSuccess(Void result) {
// data sent successfully
}
@Override
public void onFailure(Throwable t) {
// handle error
}
},
mainExecutor);
}
Chấp nhận, gửi/nhận và đóng kết nối
Kết nối bảo mật yêu cầu thiết bị nhận phải chấp nhận các kết nối mới
trước khi nhận dữ liệu. Để chấp nhận kết nối từ xa, hãy sử dụng các hàm sau
snippet:
Kotlin
suspend fun acceptIncomingConnection(participant: Participant) {
val connection = participant.acceptConnection(CHANNEL_HELLO).getOrThrow()
connection.registerReceiver(
object : ConnectionReceiver {
override fun onMessageReceived(remoteConnection: RemoteConnection, payload: ByteArray) {
displayMessage(payload.toString(UTF_8))
}
override fun onConnectionClosed(
remoteConnection: RemoteConnection,
error: Throwable?,
reason: String?
) {
// handle connection closure
}
}
)
}
Java
public void acceptIncomingConnection(Participant participant) {
// Registers call back to accept incoming remote connection
Futures.addCallback(
participant.acceptConnectionFuture(CHANNEL_HELLO),
new FutureCallback<>() {
@Override
public void onSuccess(RemoteConnection result) {
receiveData(result);
}
@Override
public void onFailure(Throwable t) {
// handle connection error
}
},
mainExecutor);
}
private void receiveData(RemoteConnection remoteConnection) {
remoteConnection.registerReceiver(
new ConnectionReceiver() {
@Override
public void onMessageReceived(RemoteConnection remoteConnection, byte[] payload) {
displayMessage(new String(payload, UTF_8));
}
@Override
public void onConnectionClosed(
RemoteConnection remoteConnection,
@Nullable Throwable error,
@Nullable String reason) {
// handle connection closure
}
});
}
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[],null,["# Secure connection API\n\nAfter discovering a remote device, the `handleIntent` function is called, and\nit's time to start passing data between clients. This section covers the\nfour essential steps of maintaining a secure connection:\n\n- Opening a connection\n- Accepting the connection\n- Sending and receiving data\n- Closing the connection\n\nOpen a connection\n-----------------\n\nTo open a connection to receive data from a remote device, use the\npreviously received participant object and specify `CHANNEL_NAME`: \n\n### Kotlin\n\n```kotlin\nparticipant\n .openConnection(CHANNEL_HELLO)\n .onFailure { /* handle failure */}\n .getOrNull()\n ?.let { connection -\u003e\n connection.send(\"Hello, world\".toByteArray(UTF_8)).onFailure { /* handle failure */}\n }\n```\n\n### Java\n\n```java\npublic void openConnection(Participant participant) {\n Futures.addCallback(\n participant.openConnectionFuture(CHANNEL_HELLO),\n new FutureCallback\u003cRemoteConnection\u003e() {\n @Override\n public void onSuccess(RemoteConnection remoteConnection) {\n // use remoteConnection object to pass data, e.g.:\n sendDataToRemoteConnection(remoteConnection);\n }\n\n @Override\n public void onFailure(Throwable t) {\n // handle error opening a remote connection\n }\n },\n mainExecutor);\n}\n\nprivate void sendDataToRemoteConnection(RemoteConnection remoteConnection) {\n Futures.addCallback(\n remoteConnection.sendFuture(\"Hello, world\".getBytes()),\n new FutureCallback\u003cVoid\u003e() {\n @Override\n public void onSuccess(Void result) {\n // data sent successfully\n }\n\n @Override\n public void onFailure(Throwable t) {\n // handle error\n }\n },\n mainExecutor);\n}\n```\n\nAccept, send/receive, and close a connection\n--------------------------------------------\n\nSecure connections require the receiving device to accept incoming connections\nbefore receiving the data. To accept a remote connection, use the following\nsnippet: \n\n### Kotlin\n\n```kotlin\nsuspend fun acceptIncomingConnection(participant: Participant) {\n val connection = participant.acceptConnection(CHANNEL_HELLO).getOrThrow()\n connection.registerReceiver(\n object : ConnectionReceiver {\n override fun onMessageReceived(remoteConnection: RemoteConnection, payload: ByteArray) {\n displayMessage(payload.toString(UTF_8))\n }\n\n override fun onConnectionClosed(\n remoteConnection: RemoteConnection,\n error: Throwable?,\n reason: String?\n ) {\n // handle connection closure\n }\n }\n )\n}\n```\n\n### Java\n\n```java\npublic void acceptIncomingConnection(Participant participant) {\n // Registers call back to accept incoming remote connection\n Futures.addCallback(\n participant.acceptConnectionFuture(CHANNEL_HELLO),\n new FutureCallback\u003c\u003e() {\n @Override\n public void onSuccess(RemoteConnection result) {\n receiveData(result);\n }\n\n @Override\n public void onFailure(Throwable t) {\n // handle connection error\n }\n },\n mainExecutor);\n}\n\nprivate void receiveData(RemoteConnection remoteConnection) {\n remoteConnection.registerReceiver(\n new ConnectionReceiver() {\n @Override\n public void onMessageReceived(RemoteConnection remoteConnection, byte[] payload) {\n displayMessage(new String(payload, UTF_8));\n }\n\n @Override\n public void onConnectionClosed(\n RemoteConnection remoteConnection,\n @Nullable Throwable error,\n @Nullable String reason) {\n // handle connection closure\n }\n });\n}\n```"]]