crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
sibmail
  опции профиля:
сообщение 31.3.2009, 12:40
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 63
Регистрация: 20.3.2009
Пользователь №: 626

Спасибо сказали: 0 раз(а)




Репутация:   0  


Надо передать строку по сети другому приложению (не Qt), чтобы на другом конце получили строковые данные, а не бинарные

Был пример
QByteArray arrBlock;
QDataStream out(&arrBlock, QIODevice::WriteOnly);
//out.setVersion(QDataStream::Qt_4_2);
out << quint16(0) << lineEdit->text();

out.device()->seek(0);
out << quint16(arrBlock.size() - sizeof(quint16));

m_pTcpSocket->write(arrBlock);


Я переделал QDataStream на QTextStream, но никакой передачи не наблюдается. Подскажите что не так и как сделать ))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 31.3.2009, 12:53
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
out.device()->seek(0);
out << quint16(arrBlock.size() - sizeof(quint16));

А с чего ты взял, что у тебя первые два байта заменятся? А не получится в итоге:
out << quint16(arrBlock.size() - sizeof(quint16)) << quint16(0) << lineEdit->text();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sibmail
  опции профиля:
сообщение 31.3.2009, 12:57
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 63
Регистрация: 20.3.2009
Пользователь №: 626

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(LE0N @ 31.3.2009, 13:53) *
Цитата
out.device()->seek(0);
out << quint16(arrBlock.size() - sizeof(quint16));

А с чего ты взял, что у тебя первые два байта заменятся? А не получится в итоге:
out << quint16(arrBlock.size() - sizeof(quint16)) << quint16(0) << lineEdit->text();


я даже не знаю как надо, первый раз с этим...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 31.3.2009, 13:05
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


А ты узнай...
И протокол тоже - узнай. А то ведь можно и quint32 передавать...Скорее всего так оно и есть....Поэтому у тебя ни чего не отображает...в приложении...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 31.3.2009, 13:17
Сообщение #5


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


прежде чем работать с сетью надо покурить рфс-ы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sibmail
  опции профиля:
сообщение 31.3.2009, 14:51
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 63
Регистрация: 20.3.2009
Пользователь №: 626

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(trdm @ 31.3.2009, 13:17) *
прежде чем работать с сетью надо покурить рфс-ы.


ни че курить не надо, я программил на других языках не плохо и работу с сетью также.

дайте пример хотя бы передачи не двоичных данных а текстовых строк по протоколу TCP
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 31.3.2009, 15:02
Сообщение #7


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


В твоем случае нужно использовать не QDataStream, а QTextStream .

Для лучшего понимания как работать с сетью в Qt посмотри примеры: Fortune Server Example и Fortune Client Example.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 31.3.2009, 15:13
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(sibmail @ 31.3.2009, 18:51) *
дайте пример хотя бы передачи не двоичных данных а текстовых строк по протоколу TCP
посмотри пример Network Chat Example

там текстовая строка передается.
фрагменты от туда:
class Connection : public QTcpSocket

 bool Connection::sendMessage(const QString &message)
 {
     if (message.isEmpty())
         return false;

     QByteArray msg = message.toUtf8();
     QByteArray data = "MESSAGE " + QByteArray::number(msg.size()) + " " + msg;
     return write(data) == data.size();
 }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sibmail
  опции профиля:
сообщение 1.4.2009, 12:40
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 63
Регистрация: 20.3.2009
Пользователь №: 626

Спасибо сказали: 0 раз(а)




Репутация:   0  


передачу я сделал
QByteArray arrBlock;
arrBlock=lineEdit->text().toUtf8();
m_pTcpSocket->write(arrBlock);

Снифером посмотрел передается как надо.

не подскажите с приемом как быть??
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 1.4.2009, 13:19
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ну и где в этом, что ты сделал передаётся длина строки?
Цитата
ни че курить не надо, я программил на других языках не плохо и работу с сетью также.

Да яяя, да яяя, да попой на ежа..... :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Admin
  опции профиля:
сообщение 1.4.2009, 13:43
Сообщение #11


Администратор
****

Группа: Администратор
Сообщений: 646
Регистрация: 9.10.2007
Из: crossplatform.ru
Пользователь №: 1

Спасибо сказали: 17 раз(а)




Репутация:   2  


Цитата(LE0N @ 1.4.2009, 13:19) *
Да яяя, да яяя, да попой на ежа.....
LE0N, Устное предупреждение!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 1.4.2009, 14:21
Сообщение #12


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(sibmail @ 1.4.2009, 13:40) *
не подскажите с приемом как быть??

Вы бы описали задачу по подробнее. Мне например непонятно в чем помощь нужна. Из вашего первого поста можно судить, что сервер есть, причем реализован без использования Qt. И вопросс был как ему передать данные. Теперь же спрашиваете про прием?
Все что вы пытаетесь сделать очень хорошо описано в Assistant-e. Ссылки уже давали
Цитата(ViGOur @ 31.3.2009, 16:02) *
Для лучшего понимания как работать с сетью в Qt посмотри примеры: Fortune Server Example и Fortune Client Example.

С использованием этих примеров можно отладить взаимодействие клиент-сервер на одном компе, что упрощает задачу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 1.4.2009, 17:36
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


По TCP-протоколу текстовые данные я так отправлял.
QTcpSocket tcpSocket;
QString fstring("");

bool writeToDevice(const char* data, int size)
{
    if(data == 0) return;
    if(!_stricmp(data, "")) return;
    qint64 d_size = tcpSocket.write(data, size);
    if(tcpSocket.waitForBytesWritten(5) && tcpSocket.waitForReadyRead(20))
        fstring += data;
        
       return d_size == size;
}


Сообщение отредактировал AD - 1.4.2009, 18:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.5.2025, 7:38