3

TCP 経由で XBoard チェス コマンドをパイプしようとしています。ncEOF が表示されると接続が閉じられることを理解しています。

例 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 エンジンを実行し、WebSocket 経由で通信したいと考えています。したがって、次のように 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");}

(1 行のコンソールで実行)

接続し、XBoard で最初の移動を白として行います。これはブラウザー コンソールの出力です。

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

すべてが良いです。今、私はブラウザから黒のように動きます:ws.send(window.btoa("move b7b5\n")); あまりにも動作します.

今、XBoard でゲームの 3 番目の移動を行うと、もう動作しません。マウスアップの直後に、次のコンソール出力が表示されます。

  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は同じことを示しています。

したがって、私の仮説は、最初の移動の後、EOF が何らかの方法で XBoard から netcat に送信されるというものです。これはあまり意味がありません。websockify が以前に「ターゲットが閉じられました」と報告しなかったのはなぜですか? そして、XBoard が送信した他のすべてのコマンドと最初の動きが大きく異なるのはなぜですか?

4

1 に答える 1

3

はい!解決策を見つけました。

xboardの「エンジン」コマンドを次のように変更し、次のように記述./runserver.shrunserver.shました(フラグセットを実行):

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

すべてが機能するようになりました!

于 2012-03-31T14:29:30.113 に答える