0

ソケットを介してメッセージを送信しています。クライアント側では、StringBuilderを使用してメッセージを組み立てています

StringBuilder sb = new StringBuilder(message);
sb.Insert(0, (char)11);
sb.Append((char)28);
sb.Append((char)13);

クライアントからサーバーに送信する

Byte[] data = new Byte[1024];
data = Encoding.ASCII.GetBytes(message.ToString());
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);

サーバ側

StringBuilder message = new StringBuilder(Encoding.ASCII.GetString(bytesReceived, 0, bytesReceived.Length));

次に、メッセージが正しいコンテナに含まれているかどうかを確認したいのですが、何らかの理由で、チェックの最後の2文字が正しい28と13ではなく0になっています。

if (((int)messsage[message.Length - 2] == 28) && ((int)message[message.Length - 1] == 13))

助けてくれてありがとう

求められたデータを追加

byte[] bytes = new byte[1024];
NetworkStream stream = tcpClient.GetStream();
stream.Read(bytes, 0, bytes.Length);
4

1 に答える 1

2

Stream.Read最大bytes.Lengthバイトを読み取ります。戻り値は、実際に読み取ったバイト数を示します。

それでも不十分な場合は、Stream.Read()もう一度電話する必要があります。

また、bytes.Length読み取られたバイト数ではなく、常に配列の長さを返します。

送信コードを見ると、ストリームからできるだけ多くの文字を読み取り、読み取ったものを文字列ビルダーに追加して、最後の2文字が28文字と13文字であるかどうかを確認し、そうである場合は次のようになります。あなたの完全なメッセージ。

于 2013-03-26T00:17:30.987 に答える