|
recv выход из цикла
|
|||
---|---|---|---|
#18+
MasterZivSergey_rb ... И если мне кто-то ещё посмеет возразить, что Pascal, Delphi неисправимо калечат людям мозг, то я просто дам ссылку на этот топик... Мне кажется, что ТС просто троллит. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:02 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
КотовасияMasterZivпропущено... И если мне кто-то ещё посмеет возразить, что Pascal, Delphi неисправимо калечат людям мозг, то я просто дам ссылку на этот топик... Мне кажется, что ТС просто троллит. Кого тут троллить? Вижу только раздувание щек от собственной значимости, хотя так никто и не предложил правильного решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:06 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDimitry Sibiryakovпропущено... пропущено... Это либо не проблема, либо кто-то совсем не умеет в логику. А вы в этом профи. Только что-то никто из вас так и не написал функцию, получающую данные из сокета, не закрывая сокета. Развели флуда на 5 страниц. Что за бред? Я тебе ссылку на описание примеров работы с tcp дал, что ты упираешься в свою indy? Если ты не знаешь формата формируемого тобой сообщения - ты гарантированно не сможешь его принять и обработать. Увольняйся, меняй работу, нанимай программиста, разбирай сам - выбор большой, но само собой ничего не заработает, и вместо тебя никто делать точно не станет ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:11 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
КотовасияSergey_rbпропущено... А вы в этом профи. Только что-то никто из вас так и не написал функцию, получающую данные из сокета, не закрывая сокета. Развели флуда на 5 страниц. Что за бред? Я тебе ссылку на описание примеров работы с tcp дал, что ты упираешься в свою indy? Если ты не знаешь формата формируемого тобой сообщения - ты гарантированно не сможешь его принять и обработать. Увольняйся, меняй работу, нанимай программиста, разбирай сам - выбор большой, но само собой ничего не заработает, и вместо тебя никто делать точно не станет Я уже писал, что вариант с закрытием сокета меня не устраивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:15 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbКотовасияпропущено... Что за бред? Я тебе ссылку на описание примеров работы с tcp дал, что ты упираешься в свою indy? Если ты не знаешь формата формируемого тобой сообщения - ты гарантированно не сможешь его принять и обработать. Увольняйся, меняй работу, нанимай программиста, разбирай сам - выбор большой, но само собой ничего не заработает, и вместо тебя никто делать точно не станет Какого еще "закрытия сокета", откуда это? Я уже писал, что вариант с закрытием сокета меня не устраивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:16 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb, Какого еще "закрытия сокета", откуда это? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:17 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbникто из вас так и не написал функцию, получающую данные из сокета, не закрывая сокета. За последние полгода я этих функций написал не менее полудюжины. Большая часть была push-типа, скармливающая принятый кусок конечному автомату, меньшая - pull-типа, читающая из сокета столько байт сколько от неё хотела вышестоящая процедура. И они все работают так, как этого требует логика моего приложения и структура моего протокола передачи. Но что (и зачем) писать для тебя, когда и логика и протокол неизвестны даже тебе самому? В этом топике уже все ответы отвечены, все советы посоветованы. Если ты не в состоянии их понять - это проблема не топика. Голосую: пристрелить. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:19 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Про протокол я тоже писал - это набор строк, заканчивающиеся переводом строки. Несколько байт я тоже могу и отправить и принять. Вопрос в получении более большого объема строк, который разбивается на порции (раз от слова пакет всех почему-то воротит) Все предложенные решения были основаны на проверку закрытии сокета. Меня это решение не устраивает. Задача - принять большой объем данных, не закрывая сокета. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:30 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbникто и не предложил правильного решения. Ок, правильно решение, практически копи-паст из работающей программы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:30 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
В каком случае получается Код: plaintext 1.
При закрытии сокета? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:31 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
В том, который описан в документации по recv(), которую надо читать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:40 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb, что ты уперся в это закрытие сокета? Из сокета читают по мере надобности, а закрыаается он при дисконнекте (например). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:40 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
КотовасияSergey_rb, что ты уперся в это закрытие сокета? Из сокета читают по мере надобности, а закрыаается он при дисконнекте (например). Потому что неизвестно, на сколько кусков будет разбито входящее сообщение. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:42 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDimitry Sibiryakovпропущено... Тогда зачем ты здесь пытаешься использовать recv() вместо ReadStrings() там? Потому что прога, написанная в Лазарусе, не работает под WinCe7.Indy в исходниках же идет. Берешь и переводишь построчно с паскаля на С ReadStrings и все остальные функции, от которых она зависит. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:43 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovВ том, который описан в документации по recv(), которую надо читать. Читаем описание авторФункция recv Функция служит для чтения данных из сокета. Прототип: int recv(int s, char * buf, int len, int flags); Первый аргумент - сокет-дескриптор, из которого читаются данные. Второй и третий аргументы - соответственно, адрес и длина буфера для записи читаемых данных. Четвертый параметр - это комбинация битовых флагов, управляющих режимами чтения. Если аргумент flags равен нулю, то считанные данные удаляются из сокета. Если значение flags есть MSG_PEEK, то данные не удаляются и могут быть считаны последущим вызовом ( или вызовами ) recv. Функция возвращает число считанных байтов или -1 в случае ошибки . Следует отметить, что нулевое значение не является ошибкой. Оно сигнализирует об отсутствии записанных в сокет процессом-поставщиком данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:44 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
BarloneSergey_rbпропущено... Потому что прога, написанная в Лазарусе, не работает под WinCe7.Indy в исходниках же идет. Берешь и переводишь построчно с паскаля на С ReadStrings и все остальные функции, от которых она зависит. ReadStrings сначала получает количество строк, потом последовательно их считывает. Recv не понимает этого протокола, и, возвращает только количество байт, в полученном куске данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:48 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
BarloneSergey_rbпропущено... Потому что прога, написанная в Лазарусе, не работает под WinCe7.Indy в исходниках же идет. Берешь и переводишь построчно с паскаля на С ReadStrings и все остальные функции, от которых она зависит. Инди и для си-шарпа вроде как есть, можно попробовать привычные для ТС формочки по-быстрому нашлепать для WinEC 7. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:51 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb... Recv не понимает этого протокола, и, возвращает только количество байт, в полученном куске данных. Хлопчык, ты книжку - чытав? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:52 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbЧитаем описание Не, ты описание процитировал. А надо читать. Чтобы не задавать глупых вопросов "в каком случае возвращается значение меньше нуля". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:55 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbBarloneпропущено... Indy в исходниках же идет. Берешь и переводишь построчно с паскаля на С ReadStrings и все остальные функции, от которых она зависит. ReadStrings сначала получает количество строк, потом последовательно их считывает. Recv не понимает этого протокола, и, возвращает только количество байт, в полученном куске данных.Да, не понимает. Поэтому и надо написать свой аналог ReadStrings. На самом деле, ReadStrings вызывает recv глубоко внутри, в ReadFromStack - IOHandler.Recv это тот самый системный recv (ну почти, небольшой враппер над ним). И recv вызывается внутри ReadStrings гораздо больше одного раза. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:01 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
BarloneSergey_rbпропущено... ReadStrings сначала получает количество строк, потом последовательно их считывает. Recv не понимает этого протокола, и, возвращает только количество байт, в полученном куске данных.Да, не понимает. Поэтому и надо написать свой аналог ReadStrings. На самом деле, ReadStrings вызывает recv глубоко внутри, в ReadFromStack - IOHandler.Recv это тот самый системный recv (ну почти, небольшой враппер над ним). И recv вызывается внутри ReadStrings гораздо больше одного раза. Я уже понял, что аналог ReadStrings мне не написать. Сделал новый сервер, который отправляет ответы через WriteLn. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:06 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
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. Все они связаны с возникновением ошибок, а не с завершением приема данных ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:11 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbBarloneпропущено... Да, не понимает. Поэтому и надо написать свой аналог ReadStrings. На самом деле, ReadStrings вызывает recv глубоко внутри, в ReadFromStack - IOHandler.Recv это тот самый системный recv (ну почти, небольшой враппер над ним). И recv вызывается внутри ReadStrings гораздо больше одного раза. Я уже понял, что аналог ReadStrings мне не написать. Сделал новый сервер, который отправляет ответы через WriteLn. Почему же ты книжку не посмотришь, там и сервер и клиент без инди, несколько вариантов. Ничего сложного, хоть на паскале хоть на си... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:12 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbВсе они связаны с возникновением ошибок, а не с завершением приема данных И это правильно, потому что завершение приёма данных сигнализируется возвращаемым значением, бОльшим нуля. БОЛЬШИМ! Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:13 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbBarloneпропущено... Да, не понимает. Поэтому и надо написать свой аналог ReadStrings. На самом деле, ReadStrings вызывает recv глубоко внутри, в ReadFromStack - IOHandler.Recv это тот самый системный recv (ну почти, небольшой враппер над ним). И recv вызывается внутри ReadStrings гораздо больше одного раза. Я уже понял, что аналог ReadStrings мне не написать. Сделал новый сервер, который отправляет ответы через WriteLn.О как. И каким образом это решает проблему с определением длины? На самом деле, совсем не обязательно ReadStrings переводить буквально построчно. Надо просто достать из первых четырех байт полученного буфера количество строк. И читать дальше, считая переводы строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:13 |
|
|
start [/forum/topic.php?fid=57&msg=39711647&tid=2017750]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 248ms |
total: | 379ms |
0 / 0 |