2

16 進文字列を tcp ソケットに送信しようとしています。この文字列の形式または変換に問題があります。形式が何を使用しているかよくわかりません。

ソケット クラスに基づいて正常に動作する WindowsPhone アプリを作成しました。このアプリは、通常、デスクトップ プログラムから Web サービスをホストするデバイスに送信されるリクエストをエミュレートします。

Wireshark を介して、Web サービスが入力ストリームを受け入れ (16 進数であると考えてください)、2 番目を返すことがわかりました。必要なデータを含む 16 進ストリーム。

したがって、デスクトップ アプリはストリームを送信しており、Wireshark は次の場合に表示されます。

データ (8 バイト) データ: 62ff03fff00574600 長さ: 8

今、私はこのストリームを再現するために多くのことを試みました. 以前はUTF8文字列で、このストリームをこの形式に変換したと思いました。しかし、送信するたびに、Wireshark で次の出力が表示されます: 62c3bf03c3bf00574600

私が調査した限りでは、62 = b ですが、ff は常に c3bf を送信します。

誰かがこのストリームを正しい形式で送信する方法を知っていますか?

乾杯、ジョー

4

2 に答える 2

0

ソケット トランスポートは気にする必要はありません。TCP パケットの内容は「なんでも」を表すバイナリです。コメントで指摘したコードから:

byte[] payload = Encoding.UTF8.GetBytes(data);
socketEventArg.SetBuffer(payload, 0, payload.Length);
...
response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred);
response = response.Trim('\0');

ソケットの送受信 (データ == 応答) の終了時。それが発生していない場合は、問題がどこにあるかを把握する必要があります。最初のステップは、次のような非常に単純なコードを記述することです。

string source = "your problem text string";
byte[] encode = Encoding.UTF8.GetBytes(source);
target = Encoding.UTF8.GetString(encode, 0, encode.Length);
Debug.Assert(source == target);

それが機能する場合は、「encode」配列を出力して、送信先のパケット データに含まれていることを確認し、それが受信されていることを確認します。正しいデータを送信しているのに受信が破損している場合、重大な問題が発生しています...それを見つけるとは思えませんが、そうである場合は、同じマシン (localhost) で送受信する非常に単純なテスト プログラムを作成して、再現可能かどうかを確認します。

推測する必要がある場合は、エンコードされている文字が Unicode ではないか、Win phone が適切にサポートしていない (適切な Unicode サポート) と言うでしょう。

于 2013-09-29T15:47:34.813 に答える
0

サーバーが期待するプロトコル/エンコーディングがわからない限り、質問で提供したバイトなどの既知のメッセージのみを再生できます。

したがって、次のようにバイト配列を直接定義するだけです。

byte[] payload = new byte[] {0x62, 0xff, 0x03, 0xff, 0xf0, 0x05, 0x74, 0x60};

以前にエンコードされた文字列で行ったように、ソケット経由で送信します。サーバーは、スニッフィングしたクライアントから送信されたように、メッセージを受け入れる必要があります。

于 2013-09-30T13:38:40.290 に答える