{"id":646,"date":"2023-03-07T20:38:22","date_gmt":"2023-03-07T12:38:22","guid":{"rendered":"http:\/\/gjweb.top\/?p=646"},"modified":"2023-04-29T16:10:12","modified_gmt":"2023-04-29T08:10:12","slug":"%e8%bf%9e%e6%8e%a5%e7%83%ad%e7%82%b9%e8%bf%9b%e8%a1%8c%e8%ae%be%e5%a4%87%e9%97%b4%e9%80%9a%e4%bf%a1","status":"publish","type":"post","link":"https:\/\/gjweb.top\/?p=646","title":{"rendered":"flutter \u8fde\u63a5\u70ed\u70b9\u8fdb\u884c\u8bbe\u5907\u95f4\u901a\u4fe1"},"content":{"rendered":"\n<p>\u9700\u8981\u4f7f\u7528 wifi_info_plugin_plus \u7b2c\u4e09\u65b9\u5e93\u83b7\u53d6\u5f53\u524d\u8fde\u63a5\u70ed\u70b9\u7684 IP; \u4f7f\u7528 dart \u63d0\u4f9b\u7684 dart:io \u5e93\u521b\u5efa socket \u8fde\u63a5<\/p>\n\n\n\n<p>\u6574\u4f53\u5b9e\u73b0\u601d\u8def,\u521b\u5efasocket\u670d\u52a1\u7aef\u548c\u5ba2\u6237\u7aef\u7528\u4e8e\u4fe1\u606f\u4ea4\u4e92, \u670d\u52a1\u7aef\u83b7\u53d6\u5f53\u524d\u7f51\u7edc\u7684 IP \u5730\u5740, \u8bbe\u7f6e\u7aef\u53e3\u53f7\uff0c\u5f00\u542f socket \u670d\u52a1\uff1b \u5ba2\u6237\u7aef\u9700\u8981\u548c\u670d\u52a1\u7aef\u5728\u540c\u4e00\u7f51\u7edc\u4e0b\u94fe\u63a5\u670d\u52a1\u7aef\u521b\u5efa scoket \u7684 IP \u5730\u5740\u83b7\u53d6\u4fe1\u606f\u548c\u53d1\u9001\u4fe1\u606f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"1-\u5efa\u7acb\u670d\u52a1\u7aefsocket\u7c7b\">1. \u5efa\u7acb\u670d\u52a1\u7aefsocket\u7c7b<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>import 'dart:io';\r\n\r\nimport 'package:get\/get.dart';\r\n\r\nclass SocketServerController extends GetxController {\r\n\r\n  late ServerSocket serverSocket;\r\n  late Socket? socketParams = null;\r\n  RxInt count = 0.obs; \r\n\r\n  @override\r\n  void onInit() {\r\n    super.onInit();\r\n  }\r\n\r\n  @override\r\n  void onReady() {\r\n    super.onReady();\r\n  }\r\n\r\n  @override\r\n  void onClose() {\r\n    super.onClose();\r\n  }\r\n\r\n  createSocket(IP,_port)async{\r\n    try {\r\n      serverSocket = await ServerSocket.bind(IP, _port);\r\n      print(\"socket\u670d\u52a1\u5668\u521b\u5efa\u6210\u529f\");\r\n      serverSocket.listen(handelSocket);\r\n    } catch (e) {\r\n      print(e.toString());\r\n    }\r\n  }\r\n\r\n  \/\/ \u76d1\u542csocket\r\n  handelSocket(Socket  socket){\r\n    \/\/ \u53ea\u6709\u63a5\u6536\u5230\u5ba2\u6237\u7aef\u7684\u6d88\u606f\u540e\u624d\u4f1a\u8fdb\u884c\u521d\u59cb\u5316\r\n    socketParams = socket;\r\n    socket.write('Hello, user');\r\n    socket.listen((data) async {\r\n      var str = utf8.decode(data);\r\n      List&lt;dynamic> jsonList = jsonDecode(str);\r\n      List&lt;int> intList = List&lt;int>.from(jsonList.map((item) => item as int));\r\n      Uint8List bytes = Uint8List.fromList(intList);\r\n      var jsonMap = json.decode(utf8.decode(bytes));\r\n      print(\"\u63a5\u53d7\u5ba2\u6237\u6d88\u606f ${jsonMap}\")\r\n    }).onDone(() {\r\n      print(\"\u670d\u52a1\u65ad\u5f00\");\r\n      closeSocket();\r\n    });\r\n  }\r\n\r\n  \/\/ \u53d1\u9001\r\n  void send()async{\r\n    if(socketParams != null){\r\n      socketParams?.write('Hello, Socket Client!');\r\n    }else{\r\n      print(\"socketParams\u5c1a\u672a\u521d\u59cb\u5316\");\r\n    }\r\n  }\r\n\r\n  \/\/ \u76d1\u542c\u5173\u95ed\r\n  void closeSocket() {\r\n    \/\/ \u9700\u8981\u7ebf\u5173\u95ed\u76d1\u542c\u7684_serverSocketObj\r\n    if (serverSocket != null) {\r\n      serverSocket.close();\r\n      print('Server Socket closed');\r\n    }\r\n  }\r\n    \r\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"2-\u5efa\u7acb\u5ba2\u6237\u7aef\u8fde\u63a5socket\u7c7b\">2.\u5efa\u7acb\u5ba2\u6237\u7aef\u8fde\u63a5socket\u7c7b<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>import 'dart:io';\r\n\r\nclass SocketClient {\r\n  final String IP; \/\/ \u70ed\u70b9IP\u5730\u5740\r\n  final int port; \/\/ \u7aef\u53e3\u53f7\r\n\r\n  SocketClient(this.IP,this.port);\r\n\r\n  late Socket _socket;\r\n\r\n  Future&lt;void> connect() async {\r\n    try {\r\n      clientSocket = await Socket.connect(IP, clientPort);\r\n      \/\/ print('Connected to server: $IP:$clientPort');\r\n      print(\"\u8fde\u63a5\u6210\u529f ${IP}:${clientPort}\");\r\n      clientStatusAlter();\r\n      sendData(\"hello server\");\r\n      clientSocket?.listen((data) {\r\n         \/\/ \u56e0 Data\u81ea\u8eab\u662f\u4e8c\u8fdb\u5236\u6d41\uff0c\u9700\u8981\u8f6c\u4e24\u6b21\u624d\u53ef\u4ee5\u83b7\u53d6\u5230\u6700\u7ec8\u7684\u6d41\r\n        var str = utf8.decode(data);\r\n        List&lt;dynamic> jsonList = jsonDecode(str);\r\n        List&lt;int> intList = List&lt;int>.from(jsonList.map((item) => item as int));\r\n        Uint8List bytes = Uint8List.fromList(intList);\r\n        var jsonMap = json.decode(utf8.decode(bytes));\r\n        print(\"\u63a5\u53d7\u670d\u52a1\u7aef\u4fe1\u606f ${jsonMap}\")\r\n      }).onDone(() {\r\n        print(\"\u76d1\u542c\u5230\u670d\u52a1\u7aef\u65ad\u4e86\");\r\n        clientSocket?.close();\r\n      });\r\n    } catch (e) {\r\n      print(e.toString());\r\n    }\r\n  }\r\n\r\n  Future&lt;void> sendData(String data) async {\r\n    try {\r\n      _socket.write(data);\r\n    } catch (e) {\r\n      print(e.toString());\r\n    }\r\n  }\r\n\r\n  Future&lt;void> disconnect() async {\r\n    try {\r\n      await _socket.close();\r\n    } catch (e) {\r\n      print(e.toString());\r\n    }\r\n  }\r\n}\r\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u4f7f\u7528\">\u4f7f\u7528<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u521b\u5efa-\u670d\u52a1\u7aefsocket-\u5b9e\u4f8b\">\u521b\u5efa \u670d\u52a1\u7aefsocket \u5b9e\u4f8b<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import 'package:get\/get.dart';\nimport 'package:wifi_info_plugin_plus\/wifi_info_plugin_plus.dart';\nimport \".\/utils\/socketServer.dart\";\nimport \".\/app\/controllers\/socket_server_controller.dart\";\n\nclass ServerPageController extends GetxController {\n  final SocketServerController socketServerController = Get.find();\n\n  RxInt count = 0.obs;\n  WifiInfoWrapper? _wifiObject;\n\n  var IP;\n  var socket;\n\n  @override\n  void onInit() {\n    super.onInit();\n  }\n\n  @override\n  void onReady() {\n    super.onReady();\n  }\n\n  @override\n  void onClose() async {\n    await socket.closeSocket();\n    super.onClose();\n  }\n\n  initPlatformState() async {\n    WifiInfoWrapper? wifiObject;\n    try {\n      wifiObject = await WifiInfoPlugin.wifiDetails;\n    } catch (err) {\n      print(\"\u8fd9\u73a9\u610f\u62a5\u9519\u4e86\");\n    }\n    _wifiObject = wifiObject;\n    String ipAddress =\n        _wifiObject != null ? _wifiObject!.ipAddress.toString() : \"...\";\n    print(\"\u6253\u5370\u8fd9\u4e2aIP: ${ipAddress}\");\n    IP = ipAddress;\n  }\n\n  \/\/ \u521b\u5efaserver\n  serverButton() async {\n    await initPlatformState();\n    socketServerController.createSocket(IP, 8888);\n  }\n\n  \/\/ \u53d1\u9001\u4fe1\u606f\n  send() {\n    socketServerController.send();\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u521b\u5efa\u5ba2\u6237\u7aef\u5b9e\u4f8b\">\u521b\u5efa\u5ba2\u6237\u7aef\u5b9e\u4f8b<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import 'package:get\/get.dart';\nimport 'package:wifi_info_plugin_plus\/wifi_info_plugin_plus.dart';\nimport \".\/utils\/socketUser.dart\";\n\nclass UserController extends GetxController {\n  \/\/TODO: Implement UserController\n\n  final count = 0.obs;\n  \n  WifiInfoWrapper? _wifiObject;\n  var IP;\n  var socket;\n\n  @override\n  void onInit() {\n    super.onInit();\n  }\n\n  @override\n  void onReady() {\n    super.onReady();\n  }\n\n  @override\n  void onClose() {\n    socket.disconnect();\n    super.onClose();\n  }\n\n  initPlatformState()async{\n    WifiInfoWrapper? wifiObject;\n    try {\n      wifiObject = await WifiInfoPlugin.wifiDetails;\n    }catch(err){\n      print(\"\u8fd9\u73a9\u610f\u62a5\u9519\u4e86\");\n    }\n    _wifiObject = wifiObject;\n    String ipAddress = _wifiObject != null ? _wifiObject!.ipAddress.toString() : \"...\";\n    print(\"\u6253\u5370\u8fd9\u4e2aIP: ${ipAddress}\");\n    IP = ipAddress;\n  }\n\n  create()async{\n    \/\/ print(IP);\n    socket = SocketClient(\"192.168.23.106\",8888);\n    await socket.connect();\n  }\n  send()async{\n    await socket.sendData(\"hello server\");\n  }\n\n  void increment() =&gt; count.value++;\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u9700\u8981\u4f7f\u7528 wifi_info_plugin_plus \u7b2c\u4e09\u65b9\u5e93\u83b7\u53d6\u5f53\u524d\u8fde\u63a5\u70ed\u70b9\u7684 IP; \u4f7f\u7528 dart \u63d0\u4f9b [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[63],"tags":[],"class_list":["post-646","post","type-post","status-publish","format-standard","hentry","category-flutter"],"_links":{"self":[{"href":"https:\/\/gjweb.top\/index.php?rest_route=\/wp\/v2\/posts\/646","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gjweb.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gjweb.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gjweb.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gjweb.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=646"}],"version-history":[{"count":9,"href":"https:\/\/gjweb.top\/index.php?rest_route=\/wp\/v2\/posts\/646\/revisions"}],"predecessor-version":[{"id":672,"href":"https:\/\/gjweb.top\/index.php?rest_route=\/wp\/v2\/posts\/646\/revisions\/672"}],"wp:attachment":[{"href":"https:\/\/gjweb.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gjweb.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=646"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gjweb.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}