0

そのため、SocketCAN、Express、および Socket.io ノード モジュールをインストールしました。

私がやりたいことは次のとおりです。* Express サーバーで Socket.io を介してソケットを初期化します * サーバーで socketCAN "node-can" モジュールを使用して、フロントエンド (Angular6) にメッセージを送信します

私がこれまでに行ったこと:

* Express サーバーを作成し、そこに Socket.io と node-can を初期化しました * アプリでソケットに接続できるようになりました

これを実現するコードは次のとおりです。

    const express = require('express');
    const path = require('path');
    const http = require('http');
    const socketIO = require('socket.io');
    var can = require('socketcan');

    var channel = can.createRawChannel("vcan0", true);

    channel.start();

    const app = express();
    const port = process.env.PORT || 3000;

    app.use(express.static(path.join(__dirname, 'dist/akkaDiagTool')));

    app.get('*', (req, res) => {
      res.sendFile(path.join(__dirname, 'dist/akkaDiagTool/index.html'));
    });

    const server = http.createServer(app);

    const io = socketIO(server);

    io.on('connection', (socket) => {
      console.log('socket connected');

     socket.on('can message', (from, msg) => {
        msg.channel.addListener("onMessage", function(data) {console.log(data);});
        console.log('Recieved message by', from , 'sayin ', msg);
      });

  socket.on('disconnected', (socket) => {
    console.log('socket disconnected');
  })
})
server.listen(port, () => {
  console.log(`Server running on port ${port}`)
})

したがって、アプリを起動してsocketcanでcanメッセージを送信するとcansend vcan0 37F#0000000012343412 、自分のログのみが表示されますmsg.channel.addListener("onMessage", function(data) {console.log(data);});

しかし、console.log('Recieved message by', from , 'sayin ', msg);ログではありません

私のAngularコンポーネントは次のようになります:

import { Component, OnInit } from '@angular/core';
import * as io from 'socket.io-client';

@Component({
.
.
.
})
export class StaticDataComponent implements OnInit {
  socket;

  constructor() {
    this.socket = io();
    this.socket.on('can message', (data) => {
      console.log(data);
    });
  }

socket connectedコンソールでログを取得するため、ソケットを接続する必要があります。

どんな助けでもいただければ幸いです

事前にt​​hx。

4

1 に答える 1

0

わかりました、私はそれを理解することができました。

サーバー上のsocket.ioを使用して、socket.emit内でio.emit()を実行する必要がありました。

io.on('connection', (socket) => {
  //create canChannel with socketcan(node-can)
  var channel = can.createRawChannel('vcan0', true);

  //emit messagees to the *can message* listening to the canChannel
  socket.emit('can message', channel.addListener('onMessage', (data) => {
    io.emit('can message', data);
  }));

  channel.start();
  //disconnect
  socket.on('disconnected', (socket) => {
    console.log('socket disconnected');
  });

Angular コンポーネント内のコードは次のとおりです。

constructor() {
    this.socket = io();
    this.socket.on('can message', (msg) => {
      console.log('data', msg);
    });
  }

提供されるコードは最小限であり、開発者コンソールにデータを記録するだけです。

于 2018-10-24T06:56:06.223 に答える