javascript - 带有 JavaScript TCP 客户端的浏览器

标签 javascript node.js sockets tcp

我在 node.js 中构建了一个 tcp 服务器,它接收数据并将数据发送到连接到该服务器的每个客户端(c++ 中的客户端)。现在我想让带有 javascript 的浏览器连接到这个服务器,但是我在服务器的控制台中收到的是这样的:

127.0.0.1:55680 message: GET / HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/
24.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Sec-WebSocket-Version: 13
Origin: null
Sec-WebSocket-Key: 19YxKKtCqZeuxtOSlaoswg==
Connection: keep-alive, Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket

我在 Node 中的服务器看起来像这样(来自互联网的示例):

// Load the TCP Library
net = require('net');

// Keep track of the chat clients
var clients = [];

// Start a TCP Server
net.createServer(function (socket) {

// Identify this client
socket.name = socket.remoteAddress + ":" + socket.remotePort;

// Put this new client in the list
clients.push(socket);

// Send a nice welcome message and announce
socket.write("Welcome " + socket.name + "\n");
broadcast(socket.name + " joined the server\n", socket);

// Handle incoming messages from clients.
socket.on('data', function (data) {
broadcast(socket.name + " message: " + data, socket);
});

// Remove the client from the list when it leaves
socket.on('end', function () {
clients.splice(clients.indexOf(socket), 1);
broadcast(socket.name + " left the server.\n");
});
// Send a message to all clients
function broadcast(message, sender) {
clients.forEach(function (client) {
// Don't want to send it to sender
if (client === sender) return;
client.write(message);
});
// Log it to the server output too
process.stdout.write(message)
}

}).listen(80);

// Put a friendly message on the terminal of the server.
console.log("TCP Server running at localhost port 80\n");

我在 javascript 中的浏览器客户端:

$(document).ready(function() 
{
    function connect()
    {
        // Websocket
        var socket = new WebSocket("ws://127.0.0.1:80");

        // Nach dem öffnen des Sockets den Status anzeigen
        socket.onopen   = function()    { message('Socket Status: '+socket.readyState+' (open)');   }
        // Nach dem empfangen einer Nachricht soll diese angezeigt werden
        socket.onmessage= function(msg) { message('Empfangen: '+msg.data);                          }           

        // SENDEN
        function send()
        {
            var text = $('#text').val();    // Text aus textbox in Variable schreiben 
            socket.send(text);      // Den Text aus der Variable an den Socket senden
            message('Gesendet : '+text) // Anzeigen was gesendet wurde
            $('#text').val("");     // Text-Inhalt der Textbox löschen
        }

        // Funktion welche die Nchrichten an das Log anfügt
        function message(msg)
        {
            $('#Log').append(msg+'</br>');
        }

        // Enter taste auf der TextBox zum senden behandeln
        $('#text').keypress(function(event) 
        {
            if (event.keyCode == '13') 
            {
                send();
            }
        }); 
    }

    connect();

});

我粘贴的第一条消息是当我的浏览器连接到tcp 服务器时我在服务器中得到的消息。我不知道如何向服务器发送数据或写入消息。除此之外,我不知道为什么会显示这样的消息。

最佳答案

问题是您在 NodeJS 中仅使用纯 TCP 连接。如果你想通过 WebSockets 进行通信,你还必须在服务器端 (NodeJS) 使用一些 WS 模块。看看https://github.com/einaros/ws

关于javascript - 带有 JavaScript TCP 客户端的浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24056135/

相关文章:

javascript - Tensorflow 给出回归问题的随机答案

node.js - Node 表达 : should you always call next() in a get or post handler?

python - 如何在选择中正确使用超时参数?

java - getSession 关闭 Socket

c++ - 使用 C++ 套接字时无法接收到多个消息

javascript - 将自动播放添加到 jquery.roundabout

javascript - 编写 JavaScript 代码与其他操作系统有何不同?

node.js - "error": "relation\"Issueds\"does not exist"

javascript - 在 Node.js 中复制到剪贴板?

javascript - IE7 默认表单方法是 "GET"。我如何判断它是用户输入的还是默认的?