относительно записи с TCP / IP в symbian - PullRequest
0 голосов
/ 28 мая 2009
void CSocket::WriteSocket()
{
    TBuf8<2> KData (_L8("60"));
//RBuf8 KData;
    RBuf8 aQuery;
    aQuery.CleanupClosePushL(); 
    aQuery.CreateL(100);
//  <?xml version="1.0"?><AM><P/><A><CE/></A></AM>
    _LIT8(KData1,"61");
    //_LIT8(KData2,"20");
    _LIT8(KData3,"A");
    _LIT8(KData4,"<?xml version=\"1.0\"?><AM><P/><A><CE/></A></AM>");
    TBuf8<100> buff,buff1;
    buff.Copy(_L("<?xml version=\"1.0\"?><AM><P/><A><CE/></A></AM>"));
    TInt len=buff.Length();
    buff1.AppendNum(len);
    aQuery.Append(KData1);
    aQuery.Append(buff1);
//  aQuery.Append(KData2);
    aQuery.Append(KData3);
    aQuery.Append(buff);    
    //iSocket.Send(KData,KExpeditedDataOpt,iStatus);
    iSocket.Write((TDesC8)aQuery,iStatus);
    User::WaitForRequest(iStatus); 
}

Я использую этот код на Symbian для связи с сервером, который находится на Java.

Но проблема в том, что данные не доходят до сервера. Это показывает, что устройство успешно подключено. Что я делаю не так в этом коде? Совместим ли TDes8 с простым текстом в Java?

Ответы [ 2 ]

1 голос
/ 29 мая 2009

перекрестный ответ от дублированного вопроса:

Ваш оператор мобильной связи может блокировать любой не HTTP-трафик.

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

Меня также особенно беспокоит использование вами символа / строки java, поскольку я ожидаю, что низкоуровневый java-сокет на сервере будет помещать входящие сетевые данные в байт [], а не в строку. Если ваш сервер использует что-то вроде вызова метода readLine (), вам может потребоваться добавить символ возврата каретки в данные, которые отправляет ваш клиент.

1 голос
/ 28 мая 2009

TDes8 - это всего лишь байты, что хорошо, если конец Java пытается прочитать ASCII, не так хорошо, если конец Java ожидает 16-битный Unicode (что и является символом Java). Но если вы читаете сокет на другом конце, то даже если он не совместим, вы все равно увидите некоторые данные, но не то, что ожидали. И протокол, по которому вы общаетесь с сервером, должен указывать кодировку независимо от того, на каком языке реализован сервер.

В противном случае:

  • Работает ли на эмуляторе?
  • Проверяли ли вы iStatus на наличие ошибок? Обычно, если подключается сокет, вы можете написать в него, но вы никогда не узнаете.
  • Сообщает ли сервер, что сокет подключен? Возможно, вы подключились не к тому хосту или к другому порту.
  • Если бы сервер прочитал некоторые данные, но по какой-то причине произошел сбой, вы бы знали? Наверное, я спрашиваю, отлаживаешь ли ты другой конец тоже. Если нет, то, возможно, ваши данные не в правильном формате и игнорируются на другом конце. Я думаю, что вы отправляете 6146A<?xml version="1.0"?><AM><P/><A><CE/></A></AM>. Некоторая трассировка и / или перехват пакетов скажут вам, правда ли это.
  • Переменная, начинающаяся с "a", обычно является параметром: это ваш реальный код? Если нет, то это относится к искаженным данным, и ваш собеседник может дать вам неправильную информацию.
  • Возможно, вы захотите выполнить PopAndDestroy aQuery перед возвратом, хотя это не влияет на эту проблему.
  • Ваша функция должна называться WriteSocketL, поскольку она может выйти.
...