我正在为我的服务器创建一个客户端,但我被卡住了。我的服务器正在发送 Unicode 文本,我的客户端收到了它。问题是这段代码:
Enum.GetName(typeof(FTPCommands), Convert.ToInt32(replace[0].Trim()))
我正在尝试FTPCommands
使用服务器发送给我的号码从我的枚举中获取文本。首先,我的客户正在接收 ID:(1 732847823
来自调试器的结果)。
它正确拆分,在这种情况下:
replace[0].ToString()
-->"1" AND replace[1].ToString()
-->"732847823"
没有错误发生!
在第二个命令中,客户端从服务器收到错误:
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()
-->“再次”和 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 服务器没有使用任何编码