Node.js NodeJS帮助将TCP端口数据代理到web套接字

Node.js NodeJS帮助将TCP端口数据代理到web套接字,node.js,tcp,websocket,Node.js,Tcp,Websocket,我试图将json数据从专用TCP端口13854代理到端口8080上的公共web套接字。为什么浏览http://localhost:8080 var http = require('http').createServer(httpHandler), fs = require("fs"), wsock = require('socket.io').listen(http), tcpsock = require('net'); var proxyPort = 8080; va

我试图将json数据从专用TCP端口13854代理到端口8080上的公共web套接字。为什么浏览
http://localhost:8080

var http = require('http').createServer(httpHandler),
    fs = require("fs"),
    wsock = require('socket.io').listen(http),
    tcpsock = require('net');

var proxyPort = 8080;
var serviceHost = 'localhost';
var servicePort = 13854;

function httpHandler (req, res) {
  res.setHeader("Access-Control-Allow-Origin", "http://example.com");
  res.end();
}

http.listen(proxyPort);
console.info("HTTP server listening on " + proxyPort);

wsock.sockets.on('connection', function (socket) { 

    var tcpClient = new tcpsock.Socket();
    tcpClient.setEncoding("ascii");
    tcpClient.setKeepAlive(true);

    tcpClient.connect(servicePort, serviceHost, function() {
        console.info('CONNECTED TO : ' + serviceHost + ':' + servicePort);

        tcpClient.on('data', function(data) {
        data = "" + data
        //send format request to socket
        if (data[0] != '{'){
            s.write(JSON.stringify({
                enableRawOutput : false,
                format : "Json"
            }) + "\n");
            return;
        }
            console.log('DATA: ' + data);
            socket.emit("httpServer", data);
        });

        tcpClient.on('end', function(data) {
            console.log('END DATA : ' + data);
        });
    });

    socket.on('tcp-manager', function(message) {
        console.log('"tcp" : ' + message);
        return;
    });

    socket.emit("httpServer", "Initial Data");
});
谢谢

首先,更改行

res.setHeader("Access-Control-Allow-Origin", "http://example.com");

由于您正在浏览到
localhost
,您的请求将被拒绝,因为源代码不是
http://example.com

其次,为了接收数据,您必须从客户端设置一个web套接字连接。只需浏览
http://localhost:8080
创建http连接,而不是web套接字连接。 我建议在本地创建一个HTML页面,并通过双击来使用它(而不是通过服务器);稍后,您可以在
节点.js
服务器上托管该页面。
请看上面的示例,以正确创建
socket.io
客户端。

我通过重新组织代码并保持套接字分离来解决问题。无论出于何种原因,似乎不需要访问控制允许源代码。我正在使用一个名为“SimpleWebSocket客户端”的Chrome插件来解决编写自己的客户端的问题

var ws = require("nodejs-websocket"),
    net = require("net");

var server = ws.createServer(function(conn) {
     conn.on("close", function(code, reason) {
        console.log("Connection closed");
    });
}).listen(8080);

var tcp = new net.Socket();
console.log('connecting to 127.0.0.1:13854');

tcp.connect(servicePort, '127.0.0.1', function() {

    //this socket requires sending data on connection
    tcp.write(JSON.stringify({
            enableRawOutput: false,
            format: "Json"
    }) + "\n");
});

tcp.on("data", function(data) {
    if (server == null || server.connections == null) {
        return;
    }

    //broadcast message:
    server.connections.forEach(function(conn) {
        conn.sendText(data);
    });
}

只要浏览“localhost:8080”,就不会建立web套接字连接。
var ws = require("nodejs-websocket"),
    net = require("net");

var server = ws.createServer(function(conn) {
     conn.on("close", function(code, reason) {
        console.log("Connection closed");
    });
}).listen(8080);

var tcp = new net.Socket();
console.log('connecting to 127.0.0.1:13854');

tcp.connect(servicePort, '127.0.0.1', function() {

    //this socket requires sending data on connection
    tcp.write(JSON.stringify({
            enableRawOutput: false,
            format: "Json"
    }) + "\n");
});

tcp.on("data", function(data) {
    if (server == null || server.connections == null) {
        return;
    }

    //broadcast message:
    server.connections.forEach(function(conn) {
        conn.sendText(data);
    });
}