3

これは Arduino のセクションにも投稿しましたが、この問題は、おそらく Arduino の問題ではなく、nanomsg と一般的な接続に関する私の無知が原因であると考えられます。

nanomsgを使用して、Arduino を使用するポートで TCP 経由で通信するサーバーと通信しようとしています。私はさまざまな構成を試みました(さまざまなnanomsgツールを使用して、arduinoにリモート接続し、arduinoをサーバーに接続します)。

サーバーモードで(WiFiWebServerの例の非常にわずかに変更されたバージョンを実行して)Arduinoを取得して、catを使用して送信したテキストを正常に読み取ることができます

sudo cat texttosend > /dev/tcp/192.168.1.50/80

ただし、すべての構成で、nanomsg を使用して送信しようとしているテキストに関係なく、常に同じ数字の文字列を取得します。arduino からバイトを 16 進数として出力すると、0 53 50 0 0 51 0 0 になります。Nanocat (nanomsg の単純なコマンド ライン ツール) は、送信してシャットダウンする代わりにハングします (送信する前に常に接続を確認しようとしているように)。データ)。

クライアントが接続し、それらのバイトを読み取り、シャットダウンして再起動するため、これはArduinoが失敗しているある種のハンドシェイクであると想定しています。両端 (ローカル コンピューターからサーバーまで) で nanomsg を使用しても問題なく動作します。

これらの数字が握手である場合、どうすればそれを完了することができますか?

Arduinoコードのループ部分の肉は

client = server.available();
if (client) {
  Serial.println("new client");
  while (client.connected()) {
    while (client.available()) {
      byte b = client.read();
      Serial.print(b,HEX);
      Serial.write(b);
    }
  }
 }

そして、接続しようとするとハングする nanocat コマンドは

nanocat --push --connect tcp://192.168.1.50:80 --data thismesadsfsdfg
4

1 に答える 1

2

次のテキストでは、TCP の nanomsg プロトコルについて説明します。

その中で、指定されたバイトストリームを取得している理由と、送信したいテキストの前に何を書くべきかがわかります。

于 2015-03-16T13:11:43.887 に答える