假設我在Windows服務上運行以下代碼。 我必須將數據從機器上的Windows服務發送到在同一臺機器上打開的網頁(,但未在該機器上託管)。從Windows服務發送UDP數據到瀏覽器在同一臺機器上運行網頁
static void Main(string[] args)
{
Int32 counter = 0;
while (counter < 100)
{
SendUDP("127.0.0.1", 49320, counter.ToString(), counter.ToString().Length);
Thread.Sleep(2000);
counter++;
}
}
public static void SendUDP(string hostNameOrAddress, int destinationPort, string data, int count)
{
IPAddress destination = Dns.GetHostAddresses(hostNameOrAddress)[0];
IPEndPoint endPoint = new IPEndPoint(destination, destinationPort);
byte[] buffer = Encoding.ASCII.GetBytes(data);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
for (int i = 0; i < count; i++)
{
socket.SendTo(buffer, endPoint);
}
socket.Close();
System.Console.WriteLine("Sent: " + data);
}
我必須監聽發送到端口49320的數據,然後在瀏覽器中處理它。
我可以在網頁上用Node.js創建一個監聽器,但是我必須單獨啓動這個服務,並在客戶端安裝node.js。
除此之外還有其他的選擇嗎?更輕巧的東西?
我也可以創建一個AJAX來每2秒鐘查詢一次web服務,它可以做與Windows服務一樣的事情,但是好像很多查詢一直沒有發送。
//websocket gateway on 8070
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs');
var mysocket = 0;
app.listen(8070);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
console.log('index.html connected');
mysocket = socket;
});
//udp server on 49320
var dgram = require("dgram");
var server = dgram.createSocket("udp4");
server.on("message", function (msg, rinfo) {
console.log("msg: " + msg);
if (mysocket != 0) {
mysocket.emit('field', "" + msg);
mysocket.broadcast.emit('field', "" + msg);
}
});
server.on("listening", function() {
var address = server.address();
console.log("udp server listening " + address.address + ":" + address.port);
});
server.bind(49320);
你有沒有考慮過在windows服務中使用SignalR? –