Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
Добрый день. Программа сервер по сокетному соединению принимает данные из вне через порт определённый по ip адресу. Сначала данные принимаются нормально из вне. Потом вроде данные из вне не приходят. Наблюдаю через программу wireshark. Соединение после передачи не разрывается висит на recv в ожидании. Периодически от себя на этот порт с помощью своей программы клиента передаю данные. Данные преданные от себя тоже нормально принимаются в wireshark. Через часика 4 из вне информация программой моей не принимается, а wireshark отображает и для внешних данных и данных от меня такие строки 10004 756.305308000 127.0.0.1 127.0.0.1 TCP 426 [TCP Retransmission] 35667 > 20163 [FIN, PSH, ACK] Seq=1 Ack=1 Win=43776 Len=360 TSval=68865652 TSecr=68865598 Почему не принимается информация? Что тут можно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 13:38 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
roma1975, FIN означает что посылающая его сторона закрыла сокет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 14:13 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyFIN означает что посылающая его сторона закрыла сокет. Точнее, если рассматривать общий случай, посылающая сторона закрыла свое направление сокета (функцией shutdown). Т.е. передача данных от нее больше невозможна. Поэтому recv на другой стороне не читает данных - их нет )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 14:19 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
Понятно. И тогда встаёт вопрос: Как отлавливать такое закрытие (функцией shutdown) программно, чтобы мне закрыть сокет свой и заново открыть для ожидания последующего соединения и данных, если программа стоит на recv в ожидании? Или это невозможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 06:23 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
roma1975, Покажите для начала ваш код. Возможно там просто ошибка )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 07:27 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 07:54 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
Вот принимающая процедура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 08:05 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
roma1975, Ну, код путанный, но похоже все правильно: if (rc<=0) - должен поймать закрытие сокета другой стороной или разрыв соединения. Может еще кто-то заметит что-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 09:22 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
Да я тоже так думаю. но видишь, чего иногда приходит-то 10004 756.305308000 127.0.0.1 127.0.0.1 TCP 426 [TCP Retransmission] 35667 > 20163 [FIN, PSH, ACK] Seq=1 Ack=1 Win=43776 Len=360 TSval=68865652 TSecr=68865598 и бывает видать не принимает в какие-то моменты данные. Может некорректно разорвали на предающей стороне связь, не через функцию close(sock), а как-то по другому и у меня программа осталась в recv в ожидании вместо того чтобы принять 0 или -1 и переоткрыть сокет, но я же точно не знаю что происходит на передающей стороне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 09:30 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
Пиши принятое в каждом соединении в файлы (все что принял, один файл на одно соединение). Потом пробуй заслать из файла своей проге и смотри как она себя ведет. Навтыкай отладочных сообщений, чтобы понять на котором месте повисает. Может ты вовсе неправильно протокол обмена реализовал. Например ты считаешь что первые 4 байта длины сообщения входят в размер сообщения, а передающий может считать что не входят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 09:45 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
Нет по протоколу описания 4 байта длины сообщения входят в размер сообщения, это протокол wialonretranlator. Да и если бы не работала совсем, я бы данные все не принимал и обрабатывал, а так вроде принимает и обрабатывает, вносит в базу, я вижу, но вот возникают такие непонятные моменты как я написал выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 09:56 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
roma1975Нет по протоколу описания 4 байта длины сообщения входят в размер сообщения, это протокол wialonretranlator. Да и если бы не работала совсем, я бы данные все не принимал и обрабатывал, а так вроде принимает и обрабатывает, вносит в базу, я вижу, но вот возникают такие непонятные моменты как я написал выше. Я не утверждаю что ошибка именно тут, написал просто для примера. Описание протокола обмена ты не дал, поэтому можно только гадать что может быть не так. Может все верно и проблема не тут. Пиши принятое в файлы и изучай. Не забывай flush() делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 10:01 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
Описание протокола WialonRetranslator 1.0 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Более полно можно посмотреть здесь: http://extapi.wialon.com/hw/cfg/WialonRetranslator 1.0.pdf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 11:34 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
roma1975, если не хотите мучиться советую посмотреть в сторону SDL_NET, меньше проблем будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 12:20 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyМожет еще кто-то заметит что-то. Ага: он наивно считает, что в каждый момент времени может быть только один коннект. Второй он замечать отказывается, отчего тот идёт на ретрансмиссии и в конце концов сдаётся. В морг. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 13:33 |
|
||
|
При длительном приеме по сокету сервер не принимает данные.
|
|||
|---|---|---|---|
|
#18+
Так мне нужно только одно соединение из вне по которому программа бы и получала данные, а другие данные я подавал для проверки как wireshark отображает данные, но почему - то и с одного соединения через какое-то время не происходило приёма данных, перезапускаю программу опять нормально принимает данные. Вообщем не понятно. Сейчас от себя на буду подавать данные в этот порт посмотрим, что будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 13:59 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39110981&tid=2018720]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
81ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 175ms |

| 0 / 0 |
