0

ソケットを使用してデスクトップ アプリから単純な文字列メッセージを送信しようとしています。クライアントにデータを送信する サーバー側のコードは次のとおりです。

    swSenderSender = new StreamWriter(tcpClients[i].GetStream());
    swSenderSender.WriteLine(From + " says: " + Message);
    swSenderSender.Flush();
    swSenderSender = null;

私は Metro アプリケーションを持っています - DataReader を使用したクライアント側コード:

    var dr = new DataReader(socket.InputStream);
    var stringHeader = await dr.LoadAsync(4);
    int strLength = dr.ReadInt32();
    uint numStrBytes = await dr.LoadAsync((uint)strLength);
    string msg = dr.ReadString(numStrBytes);

これが問題です。DataReader は、送信された文字列の長さを知る必要があります。一方、StreamWriter は、単純な文字列または新しいレーンを持つ文字列と同じようにサンドすることはできません。これら2つのコードを接続するにはどうすればよいですか? または、これを行う別の方法があるかもしれません。助けてください。クライアントとサーバー間でデータを送信できるようにデータをフォーマットする方法がわかりません。

4

1 に答える 1

2

プロトコルでこの問題を解決する通常の方法は、最初にメッセージの長さを固定長フィールド (長さ N など) に入れることです。メッセージで 999 文字を超える文字を受信しない場合は、N=3 です。例。したがって、受信コードは次のようになります

receive N characters (or bytes, whatever).
decode N to get number of characters following, say M.
receive M characters.
repeat ad nauseam.
于 2012-04-29T14:38:31.480 に答える