サーバー用のクライアントを作成していますが、行き詰まっています。サーバーが Unicode テキストを送信しており、クライアントがそれを受信しています。問題は次のコードです。
Enum.GetName(typeof(FTPCommands), Convert.ToInt32(replace[0].Trim()))
FTPCommands
サーバーから送信された番号でEnum からテキストを取得しようとしています。まず、クライアントが ID を受け取ります: 1 732847823
(デバッガーからの結果)。
この場合、正しく分割されます:
replace[0].ToString()
-->"1" AND replace[1].ToString()
-->"732847823"
エラーは発生しません!
2 番目のコマンドで、クライアントはサーバーからエラーを受け取ります。
8 Server is too full, try again laiter
また、この場合は正しく分割されます。
replace[0].ToString()
-->"1" AND replace[0].ToString()
-->"8" AND replace[1].ToString()
-->"Server" AND replace[2].ToString()
-->"is" AND replace[3].ToString()
-->"too" AND replace[4].ToString()
-->"full" AND replace[4].ToString()
-->"try" AND replace[4].ToString()
-->"再び" AND replace[4].ToString()
-->"レイター"
そして今、エラーが発生します!これが最初のコマンドで機能し、コマンドでは機能しない理由がわかりません8
。replace[0].Trim()
を数字の 8に置き換えると、正常に動作します。コードの何が問題なのか、またはそのエラーの原因は何ですか? Unicodeを使用しているからですか?
ここに私のコードのいくつかのサンプルがあります:
NetworkStream stream = client.GetStream();
StreamWriter sw = new StreamWriter(stream, Encoding.Unicode);
StreamReader sr = new StreamReader(stream);
//SendFileToServer(@"\\fs1\home\manuel.boehmler\contacts.rar", client);
AnswerToServer(FTPCommands.ID,null,sw);
AnswerToServer(FTPCommands.Username, txtBUserName.Text, sw);
AnswerToServer(FTPCommands.Password, txtBPassword.Text, sw);
AnswerToServer(FTPCommands.login,null, sw);
AnswerToServer(FTPCommands.MaxMbytes, txtBPassword.Text, sw);
//AnswerToServer(FTPCommands.FileTransfer,"", sw);
string line = null;
while (client.Connected == true)
{
if (!string.IsNullOrEmpty(line = sr.ReadLine()) && line.Length >= 2)
{
RichTxtMessage("Bekommt: " + line, true);
string[] replace = null;
string command = "";
replace = line.Split(' ');
command = replace[0].ToUpperInvariant();
string arguments = replace.Length > 1 ? line.Substring(replace[0].Length + 1) : null;
switch (Enum.GetName(typeof(FTPCommands), Convert.ToInt32(replace[0].Trim())).ToUpperInvariant()) //Error occurs here
{
case "ID":
RichTxtMessage(arguments,true);
break;
case "ERROR":
RichTxtMessage(arguments, true);
break;
}
}
public enum FTPCommands
{
Persmission = 0,
ID = 1,
Username = 2,
Password = 3,
UserNameReq = 4,
PasswordReq = 5,
Chat = 6,
MessageRecived = 7,
Error = 8,
Warning = 9
}
編集(更新):
エンコーディングとして UTF8 を使用している場合、コンソールは次の結果を返します。
ご覧のとおり、有線シンボルは最初の文字です。ただし、UNICODEを使用している場合はシンボルが表示されません(ただし、まだ機能していません)。問題を解決しました。FTP サーバーにエンコーディングを使用していません。