0

TCPソケットを介して非同期でデータを送信しています。私は現在、ローカルコンピューターでSMSCシミュレーターに接続しており、本物に接続する前に、すべてのパケットが正しく作成されていることを確認しています。

PDUを1回だけ送信し、SMSCはそれを完全に受信し、応答PDUを生成して送り返しますが、その後、100個のメッセージを受信できないことを示すエラーメッセージがシミュレーターにポップアップ表示されます。問題は、一度だけ送信すること、メッセージを絶えず送信するループが実行されていないこと、そして一度だけ送信することをデバッグして確認したことです。

問題はPDUの作成にあるのではないかと思います。まず、サイズ1024のバイト配列を作成し、必要に応じて入力します。いっぱいになると、配列のスペース全体を使用しません。したがって、シミュレータがそれを受信すると、配列からデータを取得し、実際のデータの後に配列の「0」バイトを新しいメッセージとして読み取ると考えています。これは、データを示す応答メッセージが表示されるためです。有効ではない。

これを回避する方法はありますか、それともここで何かが足りないだけですか?私によると、バイト配列で値を受け取るときは、データを取得するために必要なエンコーディングのみを使用する必要があり、残りの「0」バイトは無視する必要がありますか?

質問が曖昧な場合は申し訳ありません。

4

1 に答える 1

0

問題は確かに配列の0バイトでした。

Stack Overflowに投稿された記事を読んだ後、配列から0バイトを削除することで解決しました。

解決策は次のとおりです。

    private byte[] CleanArray(byte[] array)
    {
        int i = array.Length - 1;

        while (array[i] == 0)
        {
            i--;
        }

        byte[] cleanedArray = new byte[i + 1];
        Array.Copy(array, cleanedArray, i + 1);

        return cleanedArray;
    }
于 2012-06-26T07:12:25.057 に答える