Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 23
1

Поблема с записью в сокет

15.10.2013, 17:22. Просмотров 753. Ответов 6
Метки нет (Все метки)

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

Серверная часть:
C++ (Qt)
1
2
3
4
5
6
7
  QbyteArray sbuff;
  ...
  clientSocket->write(sbuff, sbuff.size());
  if (clientSocket->waitForBytesWritten())
  {
    qDebug() << "Time Limit";
  }
При этом sbuff.size() равен примерно 22000 и всегда процесс приходит в Time Limit, как бы я не изменял параметр в скобках waitForBytesWritten()
По идее 22000 не так уж и много, может нужно как-то по другому записывать?

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

Вот прием клиента:
C++ (Qt)
1
QByteArray recvbuff = socket->readAll();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2013, 17:22
Ответы с готовыми решениями:

Поблема с Ming32-make.exe
Доброго дня (ночи). Такая проблема. Стоит Windows XP SP 3. Поставил Пакет Qt 4.7.0. Qt Creator...

Материнка 775 сокет и процессор 771 сокет, Совместимость
Ребят помогите пожалуйста, попробовал разобраться Сам и только запутался больше... Вообщем...

4 планки Apacer DDR3 по 4Gb/1333MHz от старой МВ сокет 775 могу ли я их использовать на сокет 2011
недавно решил перейти с LGA775 на LGA2011. Финансы урезаны поэтому пока приобрёл только процессор...

Как только происходит попытка создать сокет для UDP - сокет TCP сразу ломается (выдает 10093).
Добрый день. Пытаюсь сделать соединение, использующее два канала обмена данными - TCP для...

6
1438 / 1319 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
15.10.2013, 18:41 2
Во первых
C++ (Qt)
1
2
3
QbyteArray sbuff;
  ...
clientSocket->write(sbuff);
Во вторых
Returns true if a payload of data was written to the device; otherwise returns false (i.e. if the operation timed out, or if an error occurred).
а значит
C++ (Qt)
1
2
3
4
if (!clientSocket->waitForBytesWritten())
  {
    qDebug() << "Time Limit";
  }
0
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 23
15.10.2013, 20:49  [ТС] 3
ну разумеется так и есть, просто копировал криво, прошу прощения, все так
0
1662 / 1131 / 80
Регистрация: 21.08.2008
Сообщений: 4,724
Записей в блоге: 1
16.10.2013, 11:08 4
имхо, лучше передавать в цикле, пакетами размером <=MTU т.е. максимум по 1500 байт, и перед отправкой каждого последующего пакета дожидаться "ответа" о приеме предыдущего, иначе буфер передатчика и приемника переполниться и будет разрыв соединения.
0
Псевдослучайный
1934 / 1135 / 96
Регистрация: 13.09.2011
Сообщений: 3,204
16.10.2013, 15:41 5
Цитата Сообщение от oxotnik Посмотреть сообщение
имхо, лучше передавать в цикле, пакетами размером <=MTU т.е. максимум по 1500 байт, и перед отправкой каждого последующего пакета дожидаться "ответа" о приеме предыдущего, иначе буфер передатчика и приемника переполниться и будет разрыв соединения.
Нет. Не лучше и разрыва не будет.
0
oxotnik
16.10.2013, 17:18
  #6

Не по теме:

Цитата Сообщение от NoMasters Посмотреть сообщение
Не лучше и разрыва не будет
Я до некоторых пор тоже так думал, пока всю ночь перед сдачей проекта не просидел. Правда сокеты не КуТишные были, но сути это не меняет.

0
Псевдослучайный
1934 / 1135 / 96
Регистрация: 13.09.2011
Сообщений: 3,204
16.10.2013, 21:34 7
Цитата Сообщение от oxotnik Посмотреть сообщение
Я до некоторых пор тоже так думал, пока всю ночь перед сдачей проекта не просидел. Правда сокеты не КуТишные были, но сути это не меняет.
Не надо думать, надо знать.
ТС по всей видимости использует TCP, если буфер принимающей стороны заполнится, отправляющая просто подождёт пока его вычитают, разрыва не будет пока одна из сторон(ну или кто-либо между ними) это не захочет.
И здесь совершенно не важно, используется ли в качестве обёртки Qt или нет.
А отправка потоковых данных кусками меньшими, чем MTU, только создаёт лишний трафик и нагромождения костылей.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2013, 21:34

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

Доработать сокет клиента и сокет сервера
Есть клиент с адресом 192.168.73.2 и сервер (192.168.73.145). Необходимо с помощью низкоуровневого...

Вирусы под гостевой записью и записью админа
Добрый день! у меня такой вопрос. Может ли вредоносная программа, поразившившая гостевую учетную...

Поблема с гостевой
Добрый день!Подскажите как исправить ошибку, второй день мучаюсь ничего не получается!Взял пример...

Поблема с табуляцией
1. public static void main(String args) { String header =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.