Название: Проблема с сокетами в Windows. Отправлено: olympian от Май 23, 2010, 14:12 Здравствуйте.
Могли бы вы подсказать, в чем может быть проблема. Ситуация такова: есть функция у сервера - получает строку(QString) и шлет ее на клиент. Он ее принимает и обрабатывает. Размер строки - менее 10кб. На компьютерах с Linuxom(арч, убунту) - всё прекрасно работает. Но стоило проверить на ноуте с Win7 так появилась проблема. Ни клиент, ни сервер не работают. Сервер: Специально проверил - перед отправкой он получает нужную строку, шлет, а клиент(и на винде, и на линухе) не получают ее - получают сигнал что пришло сообщение, но он сильно отличается от отправленного. Клиент: Если клиенту, пущенному под виндой послать сообщение с сервера под линухом - он также получает какую-то фигню, к делу не относящуюся.. Подскажите, в каком направлении копать надо, и сталкивался ли кто-либо с подобным? Название: Re: Проблема с сокетами в Windows. Отправлено: BRE от Май 23, 2010, 14:52 А не в кодировках ли дело?
Название: Re: Проблема с сокетами в Windows. Отправлено: olympian от Май 23, 2010, 14:57 Нет. Проблема в том, что в сокете который отправляется - ~9.2кб,а на клиент приходит ~1.4кб...
Название: Re: Проблема с сокетами в Windows. Отправлено: BRE от Май 23, 2010, 14:59 Нет. Проблема в том, что в сокете который отправляется - ~9.2кб,а на клиент приходит ~1.4кб... А это точно все данные приходят?Возможно происходит фрагментация пакетов, т.е. 1.4кб это только первая порция данных. Название: Re: Проблема с сокетами в Windows. Отправлено: olympian от Май 23, 2010, 15:03 хм... А вот об этом я не подумал. Сейчас проверю.
Название: Re: Проблема с сокетами в Windows. Отправлено: olympian от Май 23, 2010, 15:45 Так - проверил, видимо ошибка действительно в этом.
Но теперь появился другой вопрос: на клиент приходит 2 пакета подряд. На сервере данные к отправке я готовлю так: 2 байта на размер пакета, потом данные. А приходит - 1 пакет: 1400кб, в котором есть первые 2 байта, а остальные 1398(гдет) байт - пустые. (он в QByteArray не выводит). А 2й пакет - нужного мне размера, и с нужными мне данными. Могли бы объяснить, в чем причина столь странного поведения? на линуксе такого странного поведения нету. Название: Re: Проблема с сокетами в Windows. Отправлено: SimpleSunny от Май 23, 2010, 16:21 Это стандартное и описанное поведение ТСП сокета.
Поэтому сначала читайте 2 байта, а потом уже ждите прихода всех данных. UPD. Хотя прочитал невнимательно. Или вы неверно определяете размер пришедших данных или неверно отсылаете первый пакет. Посмотрите сниффером, что и как приходит клиенту. Название: Re: Проблема с сокетами в Windows. Отправлено: olympian от Май 23, 2010, 16:49 Проверяю размер я таким образом:
int c = tSocket->bytesAvailable(); или он выдает не размер? Название: Re: Проблема с сокетами в Windows. Отправлено: ритт от Май 23, 2010, 17:37 мм...кривой код?
|