首页 > 解决方案 > TCL socket 客户端到 Nodejs socket.io 的连接

问题描述

我想在 tcl 套接字和 NodeJs 服务器之间建立连接。

TCL

set serverChannel [socket 127.0.0.1 3500]

set startTime [clock seconds]

puts "client socket details: [fconfigure $serverChannel -sockname]"
puts "peer socket details: [fconfigure $serverChannel -peername]"
puts "socket error details: [fconfigure $serverChannel -error]"
puts [read $serverChannel]
puts "execution has been blocked for [expr [clock seconds] - $startTime] seconds"

close $serverChannel

输出

[root@localhost home]# tclsh socket.tcl
client socket details: 127.0.0.1 localhost 36127
peer socket details: 127.0.0.1 localhost 3500
socket error details:

execution has been blocked for 120 seconds

节点JS

const socket = new Server({
  cors: {
    credentials: true,
    origin: 'http://localhost:3500',
  },
  allowEIO3: true,
  transports: ['websocket', 'polling'],
  serveClient: true,
}).listen(listener);

socket.on('connection', (socket: Socket) => {
  socket.send('Connected');
  console.log('Socket connected');
});

我不知道我的错误是什么,无法建立联系。但是 TCL 返回连接信息。提前致谢 :)

标签: node.jslinuxexpresssocket.iotcl

解决方案


我对 Node JS 不是很熟悉,但在我看来,您正在创建一个能够处理 WebSocket 连接的 HTTP 服务器。然而,Tcl 端的套接字只是一个普通的 TCP 通道。那些不匹配。

从 Tcl 端连接后,Node JS 服务器需要一个 HTTP 请求标头。如果 2 分钟后仍未到达,它会放弃并关闭连接。

因此,您要么需要 Tcl 端的 WebSocket 实现,要么需要 Node JS 端的原始套接字服务器。


推荐阅读