2015-06-15 2 views
0
public void RecievingClients(object obj) 
    { 
     //TcpListener tp = (TcpListener)obj; 
     while (true) 
     { 
      Socket s; 
      s = TcpLogin.AcceptSocket(); 
      s.ToString(); 
      NetworkStream ns = new NetworkStream(s); 
      StreamReader sr = new StreamReader(ns); 
      StreamWriter sw = new StreamWriter(ns); 
      string _LPInfo; 
      _LPInfo = sr.ReadLine(); 
      if (_LPInfo.Substring(0, 12) == "&*@[email protected]*&") 
      { 
       bool flag; 
       string _LP = _LPInfo.Substring(12); 
       string[] _LPSep; 
       _LPSep =_LP.Split('$'); 
       flag = _DBObj.Login(_LPSep[0],_LPSep[1]); 
       if (flag == true) 
       { 
        string ip = LocalIPAddress(); 
        sw.WriteLine("&@*IP*@&"+ip+":6090&" + _LPSep[0]); 
        sw.Flush(); 
       } 
       else 
       { 
        sw.WriteLine("Login Failed"); 
        sw.Flush(); 
       } 
      } 
      else if (_LPInfo.Substring(0, 12) == "&*@[email protected]*&") 
      { 
       bool flag; 
       string _LP = _LPInfo.Substring(12); 
       string[] _LPSep; 
       _LPSep = _LP.Split('$'); 
       string _SignUpQuery = "INSERT INTO SIGNUP_TABLE (USERNAME,PSWRD) Values('"+_LPSep[0]+ "','" +_LPSep[1] +"');"; 
       flag = _DBObj.QueryHandler(_SignUpQuery); 
       if (flag == true) 
       { 
        sw.WriteLine("SignUp Successsfully"); 
        sw.Flush(); 
       } 
       else 
       { 
        sw.WriteLine("SignUp Failed"); 
        sw.Flush(); 
       } 
      } 

Это мой проект в колледже. это simole chat messenger, когда я запускаю весь этот код, но я получил исключение, если это условие используется. если (_LPInfo.Substring (0, 12) == "& @ Loginn @ & ") здесь itcome " Необработанное исключение типа 'System.ArgumentOutOfRangeException' произошло в mscorlib.dllИсключение возникает Аргументы в моем проекте C#

Дополнительная информация: Индекс и длина должны относиться к местоположению внутри строки. "

+0

Что значение '_LPInfo', когда исключение бросается? Я бы предположил, что не 12 символов. –

+0

'LPInfo' составляет менее 12 символов, поэтому' _LPInfo.Substring (0, 12) 'генерирует исключение. Измените на 'if (_LPInfo.Length> = 12 && _LPInfo.Substring (0, 12) ==" & @ Loginn @ & ")'. –

ответ

1

Проблема здесь.

_LPInfo.Substring(0, 12) 

12 - длина подстроки. Что происходит, так это то, что длина строки меньше 12, что означает, что при использовании подстроки она выходит за пределы длины строк.

При использовании подстрок вы должны убедиться, что длина строк больше, чем количество строк, которые вы проверяете, как показано ниже.

if (_LPInfo.Length > 9 && _LPInfo.Substring(0, 10) == "&@[email protected]&") 
{ 
    // Do stuff here 
} 

Также не забудьте подсчитать количество символов. «& @ Loginn @ &» составляет всего 10 символов не 12.

0

String.substring ли начинается с первого параметра и имеет длину второго параметра. Если _LPInfo равна нулю или меньше, чем 12 символов вы будете иметь проблемы там ... либо использовать перегрузку

if (_LPInfo != null && _LPInfo.Substring(0) == "&*@[email protected]*&") 
    {} 

или проверить длину первого

if (_LPInfo != null && _LPInfo.Length >= 12 && _LPInfo.Substring(0, 12) == "&*@[email protected]*&") 
    {} 
+0

У меня есть другое исключение при использовании этого :( – JOHN

+0

какое исключение вы получили? –

+0

if (_Response.StartsWith («& @ * IP * @ &»)) здесь у меня есть исключение null – JOHN

Смежные вопросы