Измените HTML при получении пакета UDP в node.js - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь отобразить содержимое полученных пакетов UDP на простой странице HTML, но я не знаю, как сделать ее динамической c. Мне удалось заставить его работать при загрузке страницы, но я не уверен, как заставить его обновляться каждый раз, когда я получаю пакет.

Мой node.js код может записывать полученные данные в консоль, но как я могу отобразить их в HTML?

Вот код, который я сейчас запускаю (node.js)

var PORT = 8888;
var HOST = '127.0.0.1';
var http = require('http');
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
var g_Message;

server.on('listening', function() {
  var address = server.address();
 console.log('UDP Server listening on ' + address.address + ':' + address.port);
});

server.on('message', function(message, remote) {
  g_Message = message;
  console.log(remote.address + ':' + remote.port +' - ' + message);

});

server.bind(PORT, HOST);

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});

  res.end(g_Message);
}).listen(8080);

Вот как я отправляю пакеты: (C ++)

/*
    Simple udp client
*/
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<winsock2.h>
#include <TlHelp32.h>
#include <Windows.h>
#include <iostream>
#include <sstream>
#pragma comment(lib,"ws2_32.lib") //Winsock Library

#define SERVER "127.0.0.1"  //ip address of udp server
#define BUFLEN 512  //Max length of buffer
#define PORT 8888   //The port on which to listen for incoming data


int main(void)
{
    struct sockaddr_in si_other;
    int s, slen = sizeof(si_other);
    char buf[BUFLEN];
    char message[BUFLEN];
    WSADATA wsa;

    //Initialise winsock
    printf("\nInitialising Winsock...");
    if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
    {
        printf("Failed. Error Code : %d", WSAGetLastError());
        exit(EXIT_FAILURE);
    }
    printf("Initialised.\n");

    //create socket
    if ((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR)
    {
        printf("socket() failed with error code : %d", WSAGetLastError());
        exit(EXIT_FAILURE);
    }

    //setup address structure
    memset((char*)&si_other, 0, sizeof(si_other));
    si_other.sin_family = AF_INET;
    si_other.sin_port = htons(PORT);
    si_other.sin_addr.S_un.S_addr = inet_addr(SERVER);

    //start communication

    while (1)
    {

        //send the message
        if (sendto(s, "Hello", strlen("Hello"), 0, (struct sockaddr*) & si_other, slen) == SOCKET_ERROR)
        {
            printf("sendto() failed with error code : %d", WSAGetLastError());
            exit(EXIT_FAILURE);
        }
        else {
            printf("Sent \"Hello\"\n");
        }


        //clear the buffer by filling null, it might have previously received data
        memset(buf, '\0', BUFLEN);
        Sleep(1000);
    }
    closesocket(s);
    WSACleanup();

    return 0;
}
...