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

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

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

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

??

該應用程序需要有一個簡單的HTTP服務器發(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

你應該會看到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)在,我們可以向活躍的本地設備發(fā)送信息。左下方的圖片是一個物理的iOS設備,右邊的是一個macOS桌面應用程序。雖它們有不同的本地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)絡

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)絡編程語言

2019-05-14 12:30:07

PythonPygame游戲框架

2025-02-25 09:41:27

2023-08-31 12:13:39

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

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)絡

2021-06-07 12:08:06

iOS Python API

2020-10-12 09:20:13

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

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

主站蜘蛛池模板: 黄色免费看| www.激情.com| 中日字幕大片在线播放 | 五月综合激情在线 | 精品国产一区二区三区久久影院 | 精品久久影院 | 亚洲欧美综合精品久久成人 | 天天综合久久网 | 久久午夜精品福利一区二区 | 91麻豆精品国产91久久久久久 | 国产精品亚洲一区二区三区在线 | 亚洲欧美视频在线观看 | 久久久久久久国产精品 | 国产精品视频一区二区三区 | 亚洲国产精品成人 | 日韩三级在线 | 天天射网站 | 国产成人午夜高潮毛片 | 五月婷婷婷 | 精品一区二区三区免费视频 | 日韩欧美在线视频 | 亚洲网在线| 久久久久久国产 | www.99久久.com| 九九热在线免费视频 | 亚洲国产精品视频一区 | 欧美视频精品 | 日韩在线观看网站 | 中文在线一区二区 | 亚洲日本一区二区三区四区 | 欧美成人精品二区三区99精品 | 国产精品三级久久久久久电影 | 亚洲精品视频在线 | 69av在线视频 | 免费一级欧美在线观看视频 | 成人国产精品入口免费视频 | 国产精品视频专区 | 啪视频在线 | 久久久久久av | 麻豆va| 国产乱码精品一区二区三区忘忧草 |