成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

快速構(gòu)建一個用本地網(wǎng)絡(luò)發(fā)送和接收消息的APP

譯文
開發(fā) 前端
構(gòu)建一個可以通過本地網(wǎng)絡(luò)發(fā)送和接收消息的應(yīng)用程序可以使用sockets,但是今天我們將創(chuàng)建一個使用HTTP服務(wù)器進行通信的簡單應(yīng)用程序。

【51CTO.com快譯】本文將創(chuàng)建一個使用HTTP服務(wù)器在本地網(wǎng)絡(luò)發(fā)送和接收消息的簡單通信APP。

??

該應(yīng)用程序需要有一個簡單的HTTP服務(wù)器發(fā)送消息:

  1. 獲取我的本地IP地址
  2. 嘗試發(fā)送消息到每個本地IP,如:
GET xxx.xxx.xxx.1/?msg=message
GET xxx.xxx.xxx.2/?msg= message
...
GET xxx.xxx.xxx.254/?msg= message

本地IP地址

我們需要獲取本地IP地址來發(fā)送消息并創(chuàng)建HttpServer實例。下面是一個簡單的方法:

// Hard coded, needs improvement
Future<String> myLocalIp() async {
final interfaces =
await NetworkInterface.list(type: InternetAddressType.IPv4, includeLinkLocal: true);
return interfaces
.where((e) => e.addresses.first.address.indexOf('192.') == 0)
?.first
?.addresses
?.first
?.address;
}

它返回一個類似這樣的IP地址:192.168.0.107

我們將使用前三個字節(jié)向每個本地IP發(fā)送一個請求:192.168.0.xxx

HttpServer

為了能夠接收請求,我們需要使用我們的本地IP和從1024到65353的任何端口創(chuàng)建一個HttpServer實例。

Future<void> startServe() async {
final ip = await myLocalIp();
var server = await HttpServer.bind(ip, 8080);
await for (HttpRequest request in server) {
_handleRequest(request);
request.response.write('Ok');
await request.response.close();
}
}

當我們收到一個請求時,我們返回' Ok '。要檢查它是否有效,可以使用這個鏈接:http://{your local IP}:8080

你應(yīng)該會看到Ok消息。

在iOS或Android上檢查之前,需要添加權(quán)限。

添加到iOS *info.plist*文件:

<key>NSAppTransportSecurity</key>
<dict><key>NSAllowsArbitraryLoads</key><true/></dict>

添加到*AndroidManifest.xml*文件:

<uses-permission android:name="android.permission.INTERNET" />

處理請求

為了簡單起見,我們將使用GET方法并使用查詢參數(shù)來發(fā)送這樣的消息:

http://{local IP}:8080?msg=message&ipip=ip

如果請求有msg和ip這樣的參數(shù),我們將這些值添加到我們的消息列表中,并調(diào)用setState或notify在屏幕上顯示該列表:

void _handleRequest(HttpRequest request) {
final msg = request.uri.queryParameters['msg'];
final from = request.uri.queryParameters['ip'];
if (msg != null) {
messages.insert(0, [from, msg]);
// set state or update
}
}

發(fā)送消息

我們必須把信息發(fā)送到每一個本地IP。我們可以使用本地IP地址來獲得前三個字節(jié),并由此建立本地IP地址列表:

void sendMessage(String msg) async {
final ip = await myLocalIp();
final threeOctet = ip.substring(0, ip.lastIndexOf('.'));
for (var i = 1; i < 200; i++) {
_sendRequest('$threeOctet.$i', "?ip=$ip&msg=$msg");
}
}

void _sendRequest(String to, String path) async {
final client = HttpClient();
client.connectionTimeout = const Duration(seconds: 2);
try {
final resp = await client.get(to, 8080, path);
resp.close();
} catch (e) {}
}

在本例中,它只將消息發(fā)送到從x.x.x.1到x.x.x.199的IP地址上,但理論上,我們可以從1發(fā)送到255。

現(xiàn)在,我們可以向活躍的本地設(shè)備發(fā)送信息。左下方的圖片是一個物理的iOS設(shè)備,右邊的是一個macOS桌面應(yīng)用程序。雖它們有不同的本地IP地址,但你可以看到他們可以互相發(fā)送消息。

?

【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】


責任編輯:黃顯東 來源: hackernoon.com
相關(guān)推薦

2023-11-08 07:51:11

RabbitMQ接收消息

2009-04-02 13:45:36

網(wǎng)關(guān)網(wǎng)絡(luò)

2021-06-07 08:32:06

K8S集群Poddebug

2020-10-09 12:45:19

創(chuàng)建消息即時消息編程語言

2021-08-27 12:16:34

fastjarJAR文件Java

2020-10-09 15:00:56

實時消息編程語言

2019-09-29 15:25:13

CockroachDBGoJavaScript

2018-09-17 15:12:25

人工智能神經(jīng)網(wǎng)絡(luò)編程語言

2025-02-25 09:41:27

2019-05-14 12:30:07

PythonPygame游戲框架

2023-08-31 12:13:39

防火墻本地網(wǎng)絡(luò)流量

2011-07-21 08:51:15

2018-03-19 17:40:10

Python區(qū)塊鏈

2019-10-28 20:12:40

OAuthGuard中間件編程語言

2020-03-31 12:21:20

JSON即時消息編程語言

2023-02-13 14:47:32

人工智能機器學習ChatGPT

2022-01-17 09:22:42

SwiftUI App Store開源

2023-05-09 22:57:26

AI網(wǎng)絡(luò)

2021-06-07 12:08:06

iOS Python API

2020-10-12 09:20:13

即時消息Access頁面編程語言
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 一区二区视频在线 | 欧美精品一区二区三区蜜桃视频 | 色偷偷888欧美精品久久久 | 黄频免费 | 精品一区二区三区四区 | 国产91久久久久 | 91麻豆蜜桃一区二区三区 | 久久成人一区二区三区 | 99精品一区二区三区 | 日韩欧美国产成人一区二区 | 91成人午夜性a一级毛片 | 免费亚洲成人 | 91视频正在播放 | 一级欧美一级日韩片 | 91视频正在播放 | 久久人体 | 亚洲色图50p | 国产福利一区二区 | 成人精品一区二区三区中文字幕 | 青青草亚洲 | 国产精品一区在线 | 丁香综合| 国产欧美一级 | 97视频在线观看网站 | www.国产日本 | 国产毛片久久久久久久久春天 | 亚洲日本欧美日韩高观看 | 第一福利社区1024 | 国产欧美一区二区三区在线看 | 国产色婷婷精品综合在线手机播放 | 日韩欧美一区二区三区免费观看 | 国产精品福利网 | 草比网站 | 中文字幕1区 | 欧美在线视频一区二区 | 久久久久无码国产精品一区 | 在线播放国产一区二区三区 | 秋霞电影一区二区 | 久久久久久国产精品免费免费男同 | 国产精品日韩欧美一区二区 | 精品久久久久久久久久久久久久 |