node.js - 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 JS 不是很熟悉,但在我看来,您正在创建一个能够处理 WebSocket 连接的 HTTP 服务器。然而,Tcl 端的套接字只是一个普通的 TCP 通道。那些不匹配。
从 Tcl 端连接后,Node JS 服务器需要一个 HTTP 请求标头。如果 2 分钟后仍未到达,它会放弃并关闭连接。
因此,您要么需要 Tcl 端的 WebSocket 实现,要么需要 Node JS 端的原始套接字服务器。
推荐阅读
- javascript - 使用 fetch() 登录后如何重定向用户
- github - 将 README.md 图像显示更改为 GitHub light-mode / dark-mode
- r - 在 R 中将变量添加到嵌套列表的优雅方法
- kubernetes - 定义另一个资源时如何从一个 Kubernetes 资源中引用值
- algorithm - 从记录集构建嵌套菜单(树)的算法
- perl - Perl chmod 文件超过 260 个字符限制路径长度
- javascript - 当计时器达到特定数字时反应振动电话
- cordova - Outsystems 项目无法编译 cordova 插件,因为未找到 ID 为“kotlin-android”的插件
- python - 我可以检索已经解析的函数定义吗?
- asp.net - 使用 moq 模拟 HttpMessageHandler - 如何获取请求的内容?