У моей команды и я эта неприятная проблема с разбором строки, полученной с нашего сервера. Сервер довольно просто гнездо вещь сделана в Qt здесь функция SendData:Кодирование строки на стороне клиента java
void sendData(QTcpSocket *client,QString response){
QString text = response.toUtf8();
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out << (quint32)0;
out << text;
out.device()->seek(0);
out << (quint32)(block.size() - sizeof(quint32));
try{
client->write(block);
}
catch(...){...
клиент находится в Java, а также довольно стандартное гнездо вещь, здесь, где мы находимся сейчас, после попытки многих много различных способов декодирование ответа от сервера:
Socket s;
try {
s = new Socket(URL, 1987);
PrintWriter output = new PrintWriter(s.getOutputStream(), true);
InputStreamReader inp = new InputStreamReader(s.getInputStream(), Charset.forName("UTF-8"));
BufferedReader rd = new BufferedReader(inp);
String st;
while ((st = rd.readLine()) != null){
System.out.println(st);
}...
Если соединение выполнено с сервером он отправляет строку «Отправить Рукопожатие» с размером строки в байтах, отправленных перед ним, как показано в первом блоке кода. Это уведомляет клиента о том, что он должен отправлять аутентификацию на сервер. На данный момент строка, которую мы получаем с сервера, выглядит так: S e n d H a n d s h a k e
Мы использовали инструменты, такие как string encode/decode tool, чтобы попытаться оценить, как строка закодирована, но она не работает при каждой конфигурации.
У нас нет идей относительно того, какая кодировка это, если таковая имеется, или как ее исправить. Любая помощь будет высоко оценена.
Это похоже на проблему с кодировкой. В полученной строке есть «секретное сообщение». В любом случае * используйте инструмент, например wirehark или tcpdump, чтобы посмотреть на данные по проводам, чтобы устранить необходимость угадывать * :) –
рассмотрит эти инструменты сейчас, спасибо – okin33
Ваш образец кода никогда не назначает блок. Предполагается, что он имеет блок = ответ.toUtf8()? – Thomas