我正在爲我的服務器製作客戶端,並且卡住了。我的服務器發送Unicode文本,我的客戶端收到它。問題是這樣的一段代碼:嘗試將字符串轉換爲整數會導致System.FormatException類型的錯誤
Enum.GetName(typeof(FTPCommands), Convert.ToInt32(replace[0].Trim()))
我想從我的枚舉FTPCommands
與服務器發過來的號碼獲取文本。首先,我的客戶端收到ID:1 732847823
(調試器的結果)。
它分割正確,在這種情況下: replace[0].ToString()
- > 「1」 和replace[1].ToString()
- >出現 「732847823」
沒有錯誤!
在第二命令中,客戶端從服務器recieving一個錯誤:
8 Server is too full, try again laiter
而且它也正確地分割,在這種情況下:
replace[0].ToString()
- > 「1」 和replace[0].ToString()
- > 「8」 和replace[1].ToString()
- > 「服務器」 和replace[2].ToString()
- > 「是」 和replace[3].ToString()
- > 「太」 和replace[4].ToString()
- > 「全」, 和replace[4].ToString()
- > 「嘗試」 和replace[4].ToString()
- > 「再次」 和replace[4].ToString()
- > 「laiter」
而現在出現錯誤! 我不知道爲什麼這是與第一個命令,而不是命令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
}
EDIT(UPDATE):
當蔭使用UTF8作爲編碼控制檯給我這個結果回到:
正如你可以看到有線符號爲第一個字符。但是,當Iam使用UNICODE時(但仍然無法工作),它並沒有顯示出符號。我解決了這個問題,我不使用任何編碼爲我的FTP服務器
您是否曾嘗試在線上放置斷點並檢查值是您認爲的值(或者如果您不能使用調試器,則將其寫入控制檯)? –
它不太可能是Unicode問題,因爲數字0到9位於ASCII範圍0到127之間,應該在沒有轉換的字符串中進行重新表示。 –