如何创建一个nodejs项目
https://www.pianshen.com/article/27061493784/
运行命令` `npm install -g express
   | 
 
树莓派上使用nodejs进行socket.io收发信息
服务器端socketServerTest.js文件:
const io = require("socket.io")(3003);
  io.on("connection", socket => {     console.log('Connected')          socket.send("Hello!");
           socket.emit("greetings", "Hey!", { "ms": "jane" }, Buffer.from([4, 3, 3, 1]));
           socket.on("message", (data) => {         console.log(data);     });
           socket.on("salutations", (elem1, elem2, elem3) => {         console.log(elem1, elem2, elem3);     }); });
  | 
 
客户端socketClientTest.js文件
const io = require("socket.io-client");
 
  const socket = new io("http://10.0.1.83:3003");
 
  socket.on("connect", () => {          socket.send("Hello!");
           socket.emit("salutations", "Hello!", { "mr": "john" }, Uint8Array.from([1, 2, 3, 4]));     console.log('hhhhh'); });
 
  socket.on("message", data => {     console.log(data); });
 
  socket.on("greetings", (elem1, elem2, elem3) => {     console.log(elem1, elem2, elem3); });
 
  | 
 
现在可以使用flutter做客户端连接
flutter做客户端使用socket.io
https://pub.dev/packages/socket_io_client
该网页有几个简单的示例程序,如dart和flutter下的server端和client端。
这里遇到了几个坑点:
坑是说自己坑…,其实文档上都写了…,刚开始自己没注意。

意思是对应于flutter下的版本v1的socket.io-client对应的Socket.io Sever的版本为v2,而npm package下的socket.io的版本已经到了v4了,一味追求最新版会导致客户端不能正常连上。

因此在树莓派下的nodejs服务器端,得使用较低版本的v2.4.1的socket.io package.

以上是第一个坑点,版本问题。
第二个问题是flutter客户端的程序。
以前用chrome的web程序运行没有问题,
Socket socket = io('http://10.0.1.83:3002');
  | 
 
但在windows下的desktop程序运行连不上,文档中如此说道:

需要改成
Socket socket = io(      'http://10.0.1.83:3002',      OptionBuilder().setTransports(['websocket'])           .build());
   | 
 
就可以连接服务器端了
flutter客户端代码为:
class WeatherCard extends StatefulWidget {   @override   _WeatherCardState createState() => _WeatherCardState(); }
  class _WeatherCardState extends State<WeatherCard> {   Socket socket = io(       'http://10.0.1.83:3002',       OptionBuilder().setTransports(['websocket'])            .build());   void closeDialogHandler(_, Socket socket, openDialogHandler) {     Navigator.of(context).pop();     socket.off('closeDialog');     socket.on(         'openDialog', (_) => openDialogHandler(_, socket, closeDialogHandler));   }
    void openDialogHandler(_, Socket socket, closeDialogHandler) {     _showMyMaterialDialog();     socket.off('openDialog');     socket.on(         'closeDialog', (_) => closeDialogHandler(_, socket, openDialogHandler));   }
    @override   void initState() {     super.initState();     loadJson();
      socket.onConnect((_) {       print('socket.io connect');            });     socket.onConnectError((_) {       print('onConnectError' + _);     });     socket.onConnectTimeout((_) {       print('onConnectTimeout' + _);     });     socket.onError((_) {       print('onError' + _);     });
      socket.on(         'openDialog', (_) => openDialogHandler(_, socket, closeDialogHandler));     socket.onDisconnect((_) => print('disconnect'));     socket.on('fromServer', (_) => print(_));   }
  |