Я пытаюсь отобразить содержимое полученных пакетов 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;
}