Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как разделить сообщения на клиент сервере
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyWhite Owl, В доке прямо написано, что не следует предполагать что INVALID_SOCKET приводится к -1.Где это написано? Ткни пальцем пожалуйста. А в winsock2.h есть строчка: #define INVALID_SOCKET (SOCKET)(~0) Так чта... Оно конечно не -1 с точки зрения компилятора, но... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 21:37 |
|
||
|
Как разделить сообщения на клиент сервере
|
|||
|---|---|---|---|
|
#18+
White OwlГде это написано? Ткни пальцем пожалуйста. http://msdn.microsoft.com/en-us/library/windows/desktop/ms740516(v=vs.85).aspx авторchecking for errors when the socket and accept functions return should not be done by comparing the return value with –1, or seeing if the value is negative (both common and legal approaches in UNIX). Instead, an application should use the manifest constant INVALID_SOCKET White OwlА в winsock2.h есть строчка Полагаться надо на АПИ, а не на детали реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 21:53 |
|
||
|
Как разделить сообщения на клиент сервере
|
|||
|---|---|---|---|
|
#18+
White Owl, Anatoly Moskovsky, MasterZiv, Сейчас у себя потестил когда клиент подключается на не реальный ип адрес Функция WSAGetLastError(); возвращает ошибку с кодом 10093 как при отправке так и при получении данных То есть наметил такую схему программы После первого подключения клиент при каждой отправке или получении данных ждет ошибку от WSAGetLastError(); с кодом 10093 и если ее получает то пытается подключиться по новой. Все правильно или опять что не так понял ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 22:01 |
|
||
|
Как разделить сообщения на клиент сервере
|
|||
|---|---|---|---|
|
#18+
Только не так. Соединяться можно и по-прежнему, а вот дальше считать любую ошибку от recv() поводом пересоздать соединение. И еще очень облегчит жизнь вынос приема-отправки сообщений в отдельную пару функций, которые сначала отладить на кошках, потом уже на их основе делать что клиента что сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 22:24 |
|
||
|
Как разделить сообщения на клиент сервере
|
|||
|---|---|---|---|
|
#18+
Начнем с того что ошибка 10093 никакого отношения к ИП адресам или ошибкам подключения не имеет. Это WSANOTINITIALISED, что означает либо еще не вызван WSAStartup либо уже вызван WSACleanup, то есть сугубо криво написанная программа :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 23:21 |
|
||
|
Как разделить сообщения на клиент сервере
|
|||
|---|---|---|---|
|
#18+
Все сделал клиент с обработкой ошибок, покритикуйте! Все разделено на отдельные функции чтобы было удобно применять в больших проектах, где всякие детали подключения и отправки только будут мешать. В процессе работы сервер может пропадать и появляться в любое время, прога при пропаже сервака сразу начинает отсчет попыток подключиться, если сервер успевает появиться работает опять в нормальном режиме если нет завершает работу с ошибкой. Ошибки обрабатываются при каждой отправке или получении данных и при первом подключении к серверу. Можно задать максимальное количество попыток подключиться и паузу между попытками. Ошибки обрабатываются просто, если она есть происходит пере подключение, хотя конечно они могут быть из за разных причин, но только эту можно обработать в программе, все остальное ошибки программиста. Сначала хотел обрабатывать только ошибку 10054, но потом подумал пусть лучше при любой ошибки переподключается. сервер выложу позже, как понимаю будет попроще, ошибки там обрабатывать не надо, сложности только в нюансах работы с много поточностью. Код: 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. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 19:52 |
|
||
|
Как разделить сообщения на клиент сервере
|
|||
|---|---|---|---|
|
#18+
trom, Вот это вот if (WSAStartup(0x202, (WSADATA *)&buff[0])) что за порнография, а? расскажи пожалуйста... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 21:17 |
|
||
|
Как разделить сообщения на клиент сервере
|
|||
|---|---|---|---|
|
#18+
MasterZiv, да спасибо! Я еще сам думал зачем при подключении массив char buff, заменил на кусок из твоего кода Код: plaintext 1. 2. 3. 4. 5. 6. 7. А так в целом все ок по коду ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 23:42 |
|
||
|
Как разделить сообщения на клиент сервере
|
|||
|---|---|---|---|
|
#18+
MasterZiv, кстати эту buff автор кода объясняет так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. то есть какая то экономия переменной, но при выносе подключения в отдельную функцию экономии никакой нет. Да и что вообще за экономия переменной ? первый раз такое слышу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 23:48 |
|
||
|
Как разделить сообщения на клиент сервере
|
|||
|---|---|---|---|
|
#18+
tromто есть какая то экономия переменной, но при выносе подключения в отдельную функцию экономии никакой нет. Да и что вообще за экономия переменной ? первый раз такое слышуИзвращение это. Совершенно не нужное и более того - вредное. Один из источников вредности ты только что увидел: буфер должен быть не менее полкилобайта размером. А если тебе буфер нужен меньшего размера, и ты его уменьшишь не заметив комментария в тексте - получишь либо GPF, либо плавающие ошибки в совершенно разных местах программы, которые будешь долго искать. Ну и в именах переменных будешь путаться. В принципе, если ты сидишь на машине с очень маленькой памятью, то это может быть полезным. Этакое "управляемое повторное использование ячеек памяти". Но в реальности такое нужно только на ОЧЕНЬ маленькой памяти. Я таким развлекался последний раз на МК-61, были такие программируемые калькуляторы с 15-ю ячейками памяти. Но уже на Специалисте, имевшем целых 48Кб ОЗУ и на ассемблере (где памятью управлять напрямую можно) осознал что такая экономия памяти может вылезти боком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2013, 01:24 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38514856&tid=2019787]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 281ms |
| total: | 439ms |

| 0 / 0 |
