2013-07-12 2 views
0

Привет, ребята, я сейчас делаю клиентское серверное приложение, используя обмен ключами DH в android. У меня возникли проблемы с преобразованием строки в длину на моей стороне клиента, странно, что преобразование работало для первых двух переменных pValue и gValue. Однако, когда я хотел преобразовать открытый ключ сервера, когда он отправлен с сервера. Я получаю исключение в формате числа: недопустимый. Я уверен, что число, посланное выше, является числовым числом, а не алфавитом, так как я напечатал их в строках. Сервер отправляет gValue: pValue: PK вместе, который разделяют:NumberFormatException: Invalid lng

Ниже приведен фрагмент кода для моей клиентской стороны.

try { 

    response = SimpleHttpClient.executeHttpGet("http://10.0.2.2:8000/MyServletProject/DHServlet"); 
    String res = response.toString(); 

    String [] ar = res.split(":"); 
    String primeValue = ar[0]; 
    String genValue = ar[1]; 
    String pkSValue = ar[2]; 
    System.out.println(pkSValue); 
    long convertPValue = Long.parseLong(primeValue); 
    long convertGValue = Long.parseLong(genValue); 
    long convertSValue = Long.parseLong(pkSValue); 
    //BigInteger biPK; 
    // biPK = new BigInteger(pkSValue); 
    //System.out.println(convertPKValue); 
    long skB=getDH.generateSKB(); 

    BigInteger bi1,bi2,bi3,sKey,biSK; 

    bi1=BigInteger.valueOf(convertGValue); 
    bi2=BigInteger.valueOf(convertPValue); 
    bi3=getDH.generatePkB(bi1, bi2, skB); 
    biSK = BigInteger.valueOf(skB); 
    //biPK= new BigInteger(pkSValue); 
    String PKClient = bi3.toString(); 
    System.out.println("The public key is "+PKClient); 
    System.out.println("The generator value is "+bi1); 
    System.out.println("The prime value is "+bi2); 

LogCat

07-12 12:24:33.459: I/System.out(2387): 4126158 
07-12 12:24:33.459: W/System.err(2387): java.lang.NumberFormatException: Invalid long: "4126158 
07-12 12:24:33.479: W/System.err(2387): " 
07-12 12:24:33.489: W/System.err(2387):  at java.lang.Long.invalidLong(Long.java:125) 
07-12 12:24:33.499: W/System.err(2387):  at java.lang.Long.parse(Long.java:362) 
07-12 12:24:33.499: W/System.err(2387):  at java.lang.Long.parseLong(Long.java:353) 
07-12 12:24:33.529: W/System.err(2387):  at java.lang.Long.parseLong(Long.java:319) 
07-12 12:24:33.529: W/System.err(2387):  at com.example.firstapp.clientside.LoginLayout$1$1.run(LoginLayout.java:70) 
07-12 12:24:33.549: W/System.err(2387):  at java.lang.Thread.run(Thread.java:856) 
07-12 12:25:55.460: W/IInputConnectionWrapper(2387): showStatusIcon on inactive InputConnection 
07-12 12:28:54.453: I/System.out(2437): java.lang.NumberFormatException: Invalid long: "2810970 

Я действительно тупик на это, надеюсь, что вы, ребята, можете помочь мне. Спасибо заранее!

+0

Почему вы используете BigInteger? Разве это не так долго? –

+0

Я использую большое целое число, так как мои открытые ключи будут подниматься до произвольной суммы. – Clearner88

ответ

3

От этой линии

07-12 12:24:33.459: I/System.out(2387): 4126158 

Похоже, что у вас есть место в конце 4126158.

Вы можете использовать java.lang.String.trim(), чтобы обрезать строку, прежде чем пытаться ее проанализировать до Long.

0

возвращенное значение "4126158 и " является излишним, так компилятор не может преобразовать это значение в тип номера

1

Похоже, ваши строки имеют возврат каретки/новые строки в них, который сбросив разбор.

Вы можете попробовать санировать данные первого, так как:

try { 
    primeValue = primeValue.trim(); 
    long convertPValue = Long.parseLong(primeValue); 
} 
catch (NumberFormatException nfe) { 
    nfe.printStackTrace() 
} 

Кроме того, вы действительно должны проверить эти ошибки, пытаясь поймать исключение.

Если у вас есть сервер, который вы также можете посмотреть на изменение выходного сигнала, соответственно, но вы все равно должны взять на себя что-нибудь клиент получает может быть мусор и не изящно :)

0
07-12 12:24:33.459: W/System.err(2387): java.lang.NumberFormatException: Invalid long: "4126158 
07-12 12:24:33.479: W/System.err(2387): " 

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

0

Трудно ответить без каких-либо подробностей, но может быть, есть какой-то пробел/разрыв строки в конце строки? Попробуйте

pkSValue = pkSValue.trim().replaceAll("(\\r|\\n)", ""); 
+0

да, вы правы. Число, которое вызывало исключение, составляло интервал – Clearner88

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