【问题标题】:Client side tcp with node.js/socket.io?带有node.js/socket.io的客户端tcp?
【发布时间】:2011-11-12 12:27:10
【问题描述】:

我是 node.js/socket.io 的新手,所以我真的不知道我在做什么,但我已经为我的服务器端准备了这个:

var app = require('net')
, fs = require('fs')


var server = app.createServer(function (socket) {
  socket.write("Echo server\r\n");
  socket.pipe(socket);
  socket.on('data', function(data) {
    console.log(data);
  });
});

var io = require('socket.io').listen(server)

server.listen(81);

因此,当我使用 nc localhost 81 并向其发送数据时,tcp 服务器正常工作。但是,我不知道如何使用脚本标签从服务器端连接和发送数据到网站上的 tcp 服务器。那么客户端连接到这个tcp服务器并向它发送数据呢?

谢谢!

新增代码:

服务器:

var app = require('net')
  , fs = require('fs')

var sockets_list = [];

var server = app.createServer(function (socket) {
  sockets_list.push(socket);
  socket.write("Echo server\r\n");

  socket.on('data', function(data) {
    console.log(data);
    for (var i = 0; i < sockets_list.length; i++) {
        sockets_list[i].write(data);
    }


  });

  socket.on('end', function() {
    var i = sockets_list.indexOf(socket);
    sockets_list.splice(i, 1);
  });


});



server.listen(81);

客户:

<script type="text/javascript" src="http://localhost:82/socket.io/socket.io.js">    </script>
<script>
var socket = io.connect('http://localhost:81');

socket.on('connect', function () {
    socket.send('hi');
});

socket.send('hi1');
socket.emit('hi2');

alert('here');



</script>

发生了什么:

我有一个网页加载需要一个套接字和一个 nc localhost 81 占用另一个套接字。因此 nc 显示网页发送的所有内容。连接网页后,alert('here');被执行,nc显示http请求,但是没有向tcp服务器发送任何其他内容,网页处于不断刷新状态。为什么网页永远不会完全加载,“嗨”消息永远不会发送,以及对 tcp 服务器的 http 请求呢?为什么我的 tcp 客户端不会与我的 tcp 服务器发生故障?

【问题讨论】:

    标签: html node.js tcp websocket socket.io


    【解决方案1】:

    Socket.io 的 how to use 页面向您展示了如何做到这一点。

    <script src="/socket.io/socket.io.js"></script>
    <script>
      var socket = io.connect('http://localhost/');
      socket.on('connect', function () {
        socket.send('hi');
    
        socket.on('message', function (msg) {
          // my msg
        });
      });
    </script>
    

    【讨论】:

    • 向 tcp 服务器发送 http 请求,这有关系吗?同样在我连接后,刷新圈继续移动,就像网页永远不会移动一样......这是怎么回事?
    • 您无法从网页建立原始 TCP 连接;没有允许您打开任意套接字的浏览器工具。 Socket.io 提供了一个模仿 WebSockets 的跨浏览器抽象层,允许类似 TCP 的全双工消息传递。
    • k thx 为我解释了第一部分,但我仍然很困惑为什么当我尝试连接到我的 tcp 服务器时,网页从未完全完成并且我无法发送任何内容。在上面添加了新代码。
    • socket io一般使用与http服务器相同的端口。它可能会打开一个 websocket 或模拟一个。无论哪种方式,我认为您想要localhost 而不是localhost:81
    猜你喜欢
    • 2012-05-24
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 2014-04-22
    • 2013-10-30
    • 2016-04-23
    相关资源
    最近更新 更多