
Linux で netcat を使用して、シリアル ポートからネットワーク経由で別のデバイスにデータを送受信しています (udp プロトコルを使用)。コマンドは次のとおりです。
nc -u 192.168.10.12 < /dev/ttyUSB0 > /dev/ttyUSB0
私が使用している USB は USB からシリアル 485 へのコンバーターですが、送信ライトが点滅しているのに受信ライトがまったく点滅していないことに気づきました。
tcpdump を使用して、メッセージがネットワーク経由で送受信されているかどうかを確認したところ、自分のマシンとデバイス マシン間でデータが転送されていることがはっきりとわかりました。これは netcat の問題ではないかと考えています。何かアイデアはありますか?
答え1
ただこれをそこに投げかけているだけです。
しかし、control-d はファイルの終わりを示す可能性があり、おそらく入力ストリームにこの文字が含まれています。その入力ストリームはシャットダウンされますが、他のストリームは動作を継続する可能性があります。
あなたの特定の状況で何が起こったのかはわかりませんが、コマンドラインで nc を使用してこれをテストできることは知っています。
#create a server
nc -v -v -l -p 9000 #yes, I was testing xdebug...
-------- in a different terminal:
#create a client
nc localhost 9000
両方に何かを入力します。片方の端末で Ctrl + D を押します。これで、その端末に入力した内容は表示されなくなりますが、もう一方の端末に入力した内容は表示されます。
驚きました。何らかのバッファの問題があるか、半二重通信だと思っていました。答えを見つける前に質問を見つけました。
ああ、このように動作しないようにするには:
stty eof undef