TCP クライアントを使用してログイン機能を作ろうとしています。クライアント側とサーバー側の 2 つの形式があります。
クライアント側はユーザー入力を処理し、サーバー側はデータベースに接続します。
問題はリーダーの結果で、常に次のように両方の入力を 1 つの長い文字列に結合します。
myusernamemypassword
クライアント側の送信者の一部は次のとおりです。
byte[] byteUsername = Encoding.Unicode.GetBytes(username);
byte[] bytePassword = Encoding.Unicode.GetBytes(password);
NetworkStream stream = client.GetStream();
stream.Write(username, 0, byteUsername.Length);
stream.Write(password, 0, bytePassword.Length);
//if offset != 0, the code always return ArgumentOutOfRangeException
サーバー側のリーダー:
return Encoding.Unicode.GetString(buffer, 0, buffer.Length)
長い検索の後、解決策を見つけましたが、2つの文字列しか処理できません。3 番目の + 文字列は 2 番目の文字列と結合されます。他の機能のために少なくとも 4 つの文字列を送信する必要があります。
更新されたリーダーコードは次のとおりです。
List<string> list = new List<string>();
int totalRead = 0;
do
{
int read = client.GetStream().Read(buffer, totalRead, buffer.Length - totalRead);
totalRead += read;
list.Add(Encoding.Unicode.GetString(buffer, 0, totalRead));
} while (client.GetStream().DataAvailable);
このコードがよくわかりません。どのバイトが最初の文字列の一部であるかをどのように知ることができますか? size
ofRead()
パラメータはlength-totalRead
which isです。length - 0
バッファ全体を返す必要がありますか?
解決策はありますか?
前にありがとう