Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ Поблема с записью в сокет

Автор: vaansk 15.10.2013, 16:18

Добрый день, есть QbyteArray, который я пытаюсь передать по сокету:

Серверная часть:

  QbyteArray sbuff;
  ...
  clientSocket->write(sbuff, sbuff.size());
  if (clientSocket->waitForBytesWritten())
  {
    qDebug() << "Time Limit";
  }


При этом sbuff.size() равен примерно 22000 и всегда процесс приходит в Time Limit, как бы я не изменял параметр в скобках waitForBytesWritten()
По идее 22000 не так уж и много, может нужно как-то по другому записывать?

Если кидаю маленькие sbuff, то все нормально доходит и клиент принимает.

Вот прием клиента:
QByteArray recvbuff = socket->readAll();


Прошу помощи

Автор: vaansk 15.10.2013, 19:50

опечатался, естественно

if (!clientSocket->waitForBytesWritten())
{...

Автор: AD 15.10.2013, 19:55

Сокет UDP или TCP? Передача broadcast или нет? Поподробнее опишите проблему.

Автор: vaansk 15.10.2013, 20:39

tcp, не broadcast

Автор: AD 15.10.2013, 20:44

Цитата(vaansk @ 15.10.2013, 21:39) *
tcp, не broadcast

А какую ошибку выдает? Попробуйте посмотреть ошибку сокета, что выдал QTcpSocket.

Автор: Iron Bug 15.10.2013, 20:54

это может быть системным ограничением. например, в венде по умолчанию 5 секунд на пакет. меняется это значение в реестре:
http://support.microsoft.com/kb/170359
вообще, большие пакеты не есть хорошо: они тормозят работу всей системы.

Автор: vaansk 15.10.2013, 21:44

как вручную разбивать на пакеты?

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)