gpt4 book ai didi

tcp - 如何从管道中删除 EOF?或者 : How to use tail -f with netcat?

转载 作者:可可西里 更新时间:2023-11-01 02:34:04 24 4
gpt4 key购买 nike

我正在尝试通过 TCP 传输 XBoard 国际象棋命令。我知道 nc 会在看到 EOF 时关闭连接。

例子1

$ nc -l 1301 | hd &
[1] 10241
$ echo -en "babab" | nc localhost 1301
00000000 62 61 62 61 62 |babab|
00000005
[1]+ Done nc -l 1301 | hd
$

这是我的问题,我只是想我需要找出如何使上面的 nc -l 命令不终止。我读过我可以使用 tail -f,但除非我使用文件或 FIFO,否则它似乎不起作用。现在这里是对一个类似问题(我认为)的解释,它导致我寻找这个问题的解决方案:

例子2

我想在浏览器中运行 XBoard Chess 引擎并通过 WebSockets 进行通信。因此,我像这样启动 XBoard:

./websockify 2023 -- xboard -fcp "nc -q -1 -k -l 2023"

它启动并且 websockify 似乎缓冲了来自 XBoard 的初始命令。我现在像这样连接浏览器:

ws = new WebSocket("ws://localhost:2023/", "base64");
ws.onclose = function(){console.log("close");};
ws.onmessage = function(evt){console.log(window.atob(evt.data));};
ws.onopen = function(){console.log("open");}

(在控制台一行执行)

它已连接,我在 XBoard 中的第一步是白色,这是浏览器控制台中的输出:

open
xboard
protover 2
[2 second delay]
[other commands]
time 30000
otim 30000
b2b3

一切都很好。现在我从浏览器中移动为黑色:ws.send(window.btoa("move b7b5\n"));也有效。

现在,当我在 XBoard 中进行游戏的第三步时,它不再起作用了。在 mouseup 之后立即出现此控制台输出:

  1: 127.0.0.1: Target closed
xboard: Error writing to first chess program: Broken pipe
xboard: Error writing to first chess program: Broken pipe
xboard: Error writing to first chess program: Broken pipe
xboard: Error: first chess program (nc -q -1 -k -l 2023) exited unexpectedly

GUI 显示相同。

所以我的假设是,在第一步之后,XBoard 以某种方式将 EOF 发送到 netcat。这真的没有意义,因为 websockify 怎么没有早点报告“目标关闭”?是什么让第一步与 XBoard 发送的所有其他命令如此不同?

最佳答案

是的!我找到了解决方案。

我将 xboard“引擎”命令更改为 ./runserver.sh 并将 runserver.sh 写为(执行标志集):

#!/bin/sh
nc -q -1 -k -l 2023 | tee /dev/null

现在一切正常!

关于tcp - 如何从管道中删除 EOF?或者 : How to use tail -f with netcat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9951944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com