powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / recv выход из цикла
25 сообщений из 178, страница 6 из 8
recv выход из цикла
    #39711609
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivSergey_rb ...

И если мне кто-то ещё посмеет возразить, что Pascal, Delphi неисправимо калечат людям мозг, то я просто дам ссылку на этот топик...
Мне кажется, что ТС просто троллит.
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711616
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияMasterZivпропущено...


И если мне кто-то ещё посмеет возразить, что Pascal, Delphi неисправимо калечат людям мозг, то я просто дам ссылку на этот топик...
Мне кажется, что ТС просто троллит.

Кого тут троллить?
Вижу только раздувание щек от собственной значимости, хотя так никто и не предложил правильного решения.
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711620
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbDimitry Sibiryakovпропущено...

пропущено...

Это либо не проблема, либо кто-то совсем не умеет в логику.


А вы в этом профи.

Только что-то никто из вас так и не написал функцию, получающую данные из сокета, не закрывая сокета.

Развели флуда на 5 страниц.
Что за бред?
Я тебе ссылку на описание примеров работы с tcp дал, что ты упираешься в свою indy? Если ты не знаешь формата формируемого тобой сообщения - ты гарантированно не сможешь его принять и обработать.
Увольняйся, меняй работу, нанимай программиста, разбирай сам - выбор большой, но само собой ничего не заработает, и вместо тебя никто делать точно не станет
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711624
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияSergey_rbпропущено...


А вы в этом профи.

Только что-то никто из вас так и не написал функцию, получающую данные из сокета, не закрывая сокета.

Развели флуда на 5 страниц.
Что за бред?
Я тебе ссылку на описание примеров работы с tcp дал, что ты упираешься в свою indy? Если ты не знаешь формата формируемого тобой сообщения - ты гарантированно не сможешь его принять и обработать.
Увольняйся, меняй работу, нанимай программиста, разбирай сам - выбор большой, но само собой ничего не заработает, и вместо тебя никто делать точно не станет

Я уже писал, что вариант с закрытием сокета меня не устраивает.
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711625
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbКотовасияпропущено...

Что за бред?
Я тебе ссылку на описание примеров работы с tcp дал, что ты упираешься в свою indy? Если ты не знаешь формата формируемого тобой сообщения - ты гарантированно не сможешь его принять и обработать.
Увольняйся, меняй работу, нанимай программиста, разбирай сам - выбор большой, но само собой ничего не заработает, и вместо тебя никто делать точно не станет
Какого еще "закрытия сокета", откуда это?
Я уже писал, что вариант с закрытием сокета меня не устраивает.
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711627
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb,

Какого еще "закрытия сокета", откуда это?
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711628
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbникто из вас так и не написал функцию, получающую данные из сокета, не закрывая сокета.

За последние полгода я этих функций написал не менее полудюжины. Большая часть была
push-типа, скармливающая принятый кусок конечному автомату, меньшая - pull-типа, читающая
из сокета столько байт сколько от неё хотела вышестоящая процедура. И они все работают
так, как этого требует логика моего приложения и структура моего протокола передачи. Но
что (и зачем) писать для тебя, когда и логика и протокол неизвестны даже тебе самому?

В этом топике уже все ответы отвечены, все советы посоветованы. Если ты не в состоянии их
понять - это проблема не топика. Голосую: пристрелить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711637
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про протокол я тоже писал - это набор строк, заканчивающиеся переводом строки.

Несколько байт я тоже могу и отправить и принять.
Вопрос в получении более большого объема строк, который разбивается на порции (раз от слова пакет всех почему-то воротит)

Все предложенные решения были основаны на проверку закрытии сокета.
Меня это решение не устраивает.

Задача - принять большой объем данных, не закрывая сокета.
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711638
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbникто и не предложил правильного решения.

Ок, правильно решение, практически копи-паст из работающей программы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
while (true)
{
   char buffer[1000]
   int r = recv(s, buffer, sizeof(buffer), 0);
   if (r > 0)
     parser->EatThis(buffer, r);
   else
   {
     if (r < 0)
       fprintf(stderr, "recv() error %d\n", WSAGetLastError());
     break;
   }
}


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711641
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В каком случае получается

Код: plaintext
1.
 if (r < 0)



При закрытии сокета?
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711643
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том, который описан в документации по recv(), которую надо читать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711644
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb,

что ты уперся в это закрытие сокета? Из сокета читают по мере надобности, а закрыаается он при дисконнекте (например).
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711647
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияSergey_rb,

что ты уперся в это закрытие сокета? Из сокета читают по мере надобности, а закрыаается он при дисконнекте (например).

Потому что неизвестно, на сколько кусков будет разбито входящее сообщение.
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711649
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbDimitry Sibiryakovпропущено...

Тогда зачем ты здесь пытаешься использовать recv() вместо ReadStrings() там?


Потому что прога, написанная в Лазарусе, не работает под WinCe7.Indy в исходниках же идет. Берешь и переводишь построчно с паскаля на С ReadStrings и все остальные функции, от которых она зависит.
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711651
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВ том, который описан в документации по recv(), которую надо читать.


Читаем описание

авторФункция recv

Функция служит для чтения данных из сокета.

Прототип:

int recv(int s, char * buf, int len, int flags);

Первый аргумент - сокет-дескриптор, из которого читаются данные. Второй и третий аргументы - соответственно, адрес и длина буфера для записи читаемых данных. Четвертый параметр - это комбинация битовых флагов, управляющих режимами чтения. Если аргумент flags равен нулю, то считанные данные удаляются из сокета. Если значение flags есть MSG_PEEK, то данные не удаляются и могут быть считаны последущим вызовом ( или вызовами ) recv.

Функция возвращает число считанных байтов или -1 в случае ошибки . Следует отметить, что нулевое значение не является ошибкой. Оно сигнализирует об отсутствии записанных в сокет процессом-поставщиком данных.
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711656
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneSergey_rbпропущено...


Потому что прога, написанная в Лазарусе, не работает под WinCe7.Indy в исходниках же идет. Берешь и переводишь построчно с паскаля на С ReadStrings и все остальные функции, от которых она зависит.

ReadStrings сначала получает количество строк, потом последовательно их считывает.
Recv не понимает этого протокола, и, возвращает только количество байт, в полученном куске данных.
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711657
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneSergey_rbпропущено...


Потому что прога, написанная в Лазарусе, не работает под WinCe7.Indy в исходниках же идет. Берешь и переводишь построчно с паскаля на С ReadStrings и все остальные функции, от которых она зависит.
Инди и для си-шарпа вроде как есть, можно попробовать привычные для ТС формочки по-быстрому нашлепать для WinEC 7.
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711659
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb...
Recv не понимает этого протокола, и, возвращает только количество байт, в полученном куске данных.
Хлопчык, ты книжку - чытав?
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711660
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЧитаем описание

Не, ты описание процитировал. А надо читать. Чтобы не задавать глупых вопросов "в каком
случае возвращается значение меньше нуля".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711662
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbBarloneпропущено...
Indy в исходниках же идет. Берешь и переводишь построчно с паскаля на С ReadStrings и все остальные функции, от которых она зависит.

ReadStrings сначала получает количество строк, потом последовательно их считывает.
Recv не понимает этого протокола, и, возвращает только количество байт, в полученном куске данных.Да, не понимает. Поэтому и надо написать свой аналог ReadStrings. На самом деле, ReadStrings вызывает recv глубоко внутри, в ReadFromStack - IOHandler.Recv это тот самый системный recv (ну почти, небольшой враппер над ним). И recv вызывается внутри ReadStrings гораздо больше одного раза.
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711667
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneSergey_rbпропущено...


ReadStrings сначала получает количество строк, потом последовательно их считывает.
Recv не понимает этого протокола, и, возвращает только количество байт, в полученном куске данных.Да, не понимает. Поэтому и надо написать свой аналог ReadStrings. На самом деле, ReadStrings вызывает recv глубоко внутри, в ReadFromStack - IOHandler.Recv это тот самый системный recv (ну почти, небольшой враппер над ним). И recv вызывается внутри ReadStrings гораздо больше одного раза.

Я уже понял, что аналог ReadStrings мне не написать.
Сделал новый сервер, который отправляет ответы через WriteLn.
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711669
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rbЧитаем описание

Не, ты описание процитировал. А надо читать. Чтобы не задавать глупых вопросов "в каком
случае возвращается значение меньше нуля".


авторReturn Value

If no error occurs, recv returns the number of bytes received and the buffer pointed to by the buf parameter will contain this data received. If the connection has been gracefully closed, the return value is zero.

Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.



Error code

Meaning

WSANOTINITIALISED A successful WSAStartup call must occur before using this function.
WSAENETDOWN The network subsystem has failed.
WSAEFAULT The buf parameter is not completely contained in a valid part of the user address space.
WSAENOTCONN The socket is not connected.
WSAEINTR The (blocking) call was canceled through WSACancelBlockingCall.
WSAEINPROGRESS A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function.
WSAENETRESET For a connection-oriented socket, this error indicates that the connection has been broken due to keep-alive activity that detected a failure while the operation was in progress. For a datagram socket, this error indicates that the time to live has expired.
WSAENOTSOCK The descriptor is not a socket.
WSAEOPNOTSUPP MSG_OOB was specified, but the socket is not stream-style such as type SOCK_STREAM, OOB data is not supported in the communication domain associated with this socket, or the socket is unidirectional and supports only send operations.
WSAESHUTDOWN The socket has been shut down; it is not possible to receive on a socket after shutdown has been invoked with how set to SD_RECEIVE or SD_BOTH.
WSAEWOULDBLOCK The socket is marked as nonblocking and the receive operation would block.
WSAEMSGSIZE The message was too large to fit into the specified buffer and was truncated.
WSAEINVAL The socket has not been bound with bind, or an unknown flag was specified, or MSG_OOB was specified for a socket with SO_OOBINLINE enabled or (for byte stream sockets only) len was zero or negative.
WSAECONNABORTED The virtual circuit was terminated due to a time-out or other failure. The application should close the socket as it is no longer usable.
WSAETIMEDOUT The connection has been dropped because of a network failure or because the peer system failed to respond.
WSAECONNRESET The virtual circuit was reset by the remote side executing a hard or abortive close. The application should close the socket as it is no longer usable. On a UDP-datagram socket, this error would indicate that a previous send operation resulted in an ICMP "Port Unreachable" message.


Все они связаны с возникновением ошибок, а не с завершением приема данных
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711670
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbBarloneпропущено...
Да, не понимает. Поэтому и надо написать свой аналог ReadStrings. На самом деле, ReadStrings вызывает recv глубоко внутри, в ReadFromStack - IOHandler.Recv это тот самый системный recv (ну почти, небольшой враппер над ним). И recv вызывается внутри ReadStrings гораздо больше одного раза.

Я уже понял, что аналог ReadStrings мне не написать.
Сделал новый сервер, который отправляет ответы через WriteLn.
Почему же ты книжку не посмотришь, там и сервер и клиент без инди, несколько вариантов. Ничего сложного, хоть на паскале хоть на си...
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711674
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbВсе они связаны с возникновением ошибок, а не с завершением приема данных

И это правильно, потому что завершение приёма данных сигнализируется возвращаемым
значением, бОльшим нуля. БОЛЬШИМ!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
recv выход из цикла
    #39711675
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbBarloneпропущено...
Да, не понимает. Поэтому и надо написать свой аналог ReadStrings. На самом деле, ReadStrings вызывает recv глубоко внутри, в ReadFromStack - IOHandler.Recv это тот самый системный recv (ну почти, небольшой враппер над ним). И recv вызывается внутри ReadStrings гораздо больше одного раза.

Я уже понял, что аналог ReadStrings мне не написать.
Сделал новый сервер, который отправляет ответы через WriteLn.О как. И каким образом это решает проблему с определением длины?
На самом деле, совсем не обязательно ReadStrings переводить буквально построчно. Надо просто достать из первых четырех байт полученного буфера количество строк. И читать дальше, считая переводы строк.
...
Рейтинг: 0 / 0
25 сообщений из 178, страница 6 из 8
Форумы / C++ [игнор отключен] [закрыт для гостей] / recv выход из цикла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]