Название: TcpServer не принимает сообщения Отправлено: RedDog от Декабрь 09, 2010, 10:07 не пойму, почему не доходят сообщения до сервера:
вот сам сервер: Код: class Dialog : public QDialog подключаюсь и отправляю ему сообщения вот так: Код: CServerConnection::CServerConnection(QObject *parent) : Название: Re: TcpServer не принимает сообщения Отправлено: BRE от Декабрь 09, 2010, 10:15 Что, по твоему делает этот код?
Код
Почему не почмотреть примеры и не разобраться как они работают, почему не почитать документацию? :) Название: Re: TcpServer не принимает сообщения Отправлено: RedDog от Декабрь 09, 2010, 11:40 Благодарю за наводку, принимает.
Теперь другая проблема, в цикле шлю сообщения со структурой, принимает не пойми как, т.е. большая часть данных где то теряется, при чем именно пакеты целиком теряются, т.к выводит правильные значения, но всего 2-3 штуки и с большим и рандомным шагом.. Как тут можно реализовать? вот что у сервера: Код: void Dialog::on_dataRead() вот что идет с клиента: Код: void CServerConnection::SendData(QMap<QString, int> data) Название: Re: TcpServer не принимает сообщения Отправлено: Amigo_sa от Декабрь 09, 2010, 11:49 В корне неправильно использовать memcpy для того чтобы записать структуру в бинарный буфер. Потому что мы в общем случае не знаем, как именно структура в памяти располагается. Надо написать функцию для упаковки структуры в поток и восстановления. Как вариант переопределить метод >> у BinaryStream
Название: Re: TcpServer не принимает сообщения Отправлено: RedDog от Декабрь 09, 2010, 11:54 В корне неправильно использовать memcpy для того чтобы записать структуру в бинарный буфер. Потому что мы в общем случае не знаем, как именно структура в памяти располагается. Надо написать функцию для упаковки структуры в поток и восстановления. Как вариант переопределить метод >> у BinaryStream ну я всегда полагал, что она располагается линейно в памяти, в конце концов столько было примеров по поводу записи структуры в файл и ее восстановления оттуда, и ни у кого вроде с восстановлением проблем не возникало (если структура не содержит в себе указателей).Но это все лирика, вопрос в другом: куда деваются пакеты и как их достать все из сети? Название: Re: TcpServer не принимает сообщения Отправлено: BRE от Декабрь 09, 2010, 12:05 Но это все лирика, вопрос в другом: куда деваются пакеты и как их достать все из сети? Они не куда не деваются, ты их вычитываешь с помощью readAll к себе в буфер, только обрабатывашь только первую структуру из всего пакета.Так ты ничего работающего не напишешь, поверь. Нужны минимальные базовые знания. ;) Название: Re: TcpServer не принимает сообщения Отправлено: RedDog от Декабрь 09, 2010, 12:20 Нужны минимальные базовые знания. ;) просьба развернуть ответ! ;) сделал через QTcpSocket::read Код: char *buf = new char [sizeof(sendingStruct) + 2]; Название: Re: TcpServer не принимает сообщения Отправлено: BRE от Декабрь 09, 2010, 12:25 А ты посмотри в примерах Qt как сделано там. ;)
Название: Re: TcpServer не принимает сообщения Отправлено: RedDog от Декабрь 09, 2010, 13:59 А ты посмотри в примерах Qt как сделано там. ;) Всё поговорками говорил.(с) к/ф Брат.Ты имеешь ввиду пример Fortune Client/Server и будет правильней через QDataStream делать? Название: Re: TcpServer не принимает сообщения Отправлено: BRE от Декабрь 09, 2010, 15:36 Ты имеешь ввиду пример Fortune Client/Server Да.и будет правильней через QDataStream делать? Да.Что бы понять почему, стоит вспомнить о порядке следования байт на разных архитектурах, о сетевом порядке байт. QDataStream о этом знает и будет все делать как надо. Название: Re: TcpServer не принимает сообщения Отправлено: RedDog от Декабрь 09, 2010, 16:04 Что бы понять почему, стоит вспомнить о порядке следования байт на разных архитектурах, о сетевом порядке байт. QDataStream о этом знает и будет все делать как надо. в документации Qt такого нету, или не нашел.а если сервера писать не на Qt, то как там определять последовательность байт? Название: Re: TcpServer не принимает сообщения Отправлено: BRE от Декабрь 09, 2010, 16:13 а если сервера писать не на Qt, то как там определять последовательность байт? http://ru.wikipedia.org/wiki/Порядок_байтовТам есть отдельная часть про сетевой порядок. |