|
|
|
Траблы с CSocket, CSocketFile (MFC)
|
|||
|---|---|---|---|
|
#18+
Hi All... Кто-нить писал приложение в "трехзвенной" архитектуре на MFC?.. Не могу побороть странную болезнь "сервера" - переодически он не отправляет "клиенту" пакет, хотя по коду это невозможно ... отловил 100% момент этого поведения и вот как это выглядит ... Привожу часть кода отправки сформированного пакета с сервера: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2005, 08:53 |
|
||
|
Траблы с CSocket, CSocketFile (MFC)
|
|||
|---|---|---|---|
|
#18+
а почему так ? Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. так что просто у тебя не выполняется этот код всегда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2005, 11:50 |
|
||
|
Траблы с CSocket, CSocketFile (MFC)
|
|||
|---|---|---|---|
|
#18+
Hi zuzu Ты глубоко не прав ... записи абсолютно идентичны ... дело вкуса - ну привык я так писать ... а bSuccess всегда или TRUE или FALSE ... точнее FALSE она никогда еще не была (для этого отдельная обработка ниже) ... те попадание "внутрь" ВСЕГДА ... но ведь НЕ всегда клиентская часть получает передаваемый пакет ... да если б хотя бы этот пакет приходил каким-то битым! ... так нет OnRecive на клиентском сокете вообще не отрабытывает иногда... я уже так устал биться с этим ... т.е. ситуация на клиенте выглядит следующим образом: все работает-работает, а потом "виснет" (разумеется - основной поток приостановлен пока с сервера не прийдет ожидаемый ответ) ... удалось добиться 100%(почти - иногда "пробивает") повторяемости ситуации всего лишь поменяв местами два SQL запроса к серверу ... чует мое сердце, что здесь что-то с CMemFile и CArchive, но пока ничего сделать не могу ... могет есть у кого какие-нибудь предположения ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2005, 12:35 |
|
||
|
Траблы с CSocket, CSocketFile (MFC)
|
|||
|---|---|---|---|
|
#18+
а у тебя не может случайно получится что 2 потока пишут в тотже файл одновременно ?, и вообсче зачем писать в файл ?, буфер и так можно передать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2005, 13:16 |
|
||
|
Траблы с CSocket, CSocketFile (MFC)
|
|||
|---|---|---|---|
|
#18+
Нет писать не могут в один ... для каждого соединения на сервере открывается свой поток(CClientThread класс от CWinThread) => у каждого свои экземпляры CSocket, CSocketFile, CMemFile(куда, повторюсь, сначала считывается приходящий пакет, а потом в него формируется исходящий пакет) и т.д. и т.п. ... пишу в CMemFile+СArchive потому что серилизация! удобно однако, т.е. на клиенте ar << CString, на сервере ar >> CString ... если я тебя правильно онял ... и вообще CMemFile это же "memory file" со всеми от сюда вытекающими ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2005, 13:32 |
|
||
|
Траблы с CSocket, CSocketFile (MFC)
|
|||
|---|---|---|---|
|
#18+
а какая разница если он спроецированный в памети, я имел в веду работают несколько потоков с темже файлом или нет ?, если да то нужно какието семафоры юзать перед записью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2005, 15:55 |
|
||
|
Траблы с CSocket, CSocketFile (MFC)
|
|||
|---|---|---|---|
|
#18+
Hi zuzu Нет ... каждый работает со своим ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2005, 07:12 |
|
||
|
Траблы с CSocket, CSocketFile (MFC)
|
|||
|---|---|---|---|
|
#18+
Flush сбрасывает данные из временного буфера в финальный, если был бы файл на диске он бы сброил эти данные физически на диск, в данном случае он сбрасывает их в твой файл из памети, проблема быстрее всего в отсылке данных, ты этот кусок не показал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2005, 16:13 |
|
||
|
Траблы с CSocket, CSocketFile (MFC)
|
|||
|---|---|---|---|
|
#18+
Hi zuzu Спасибо за участие ... проблему частично решил ... чтобы не повторяться вот тебе ссылка: http://forum.sources.ru/index.php?showtopic=87956 к сожалению только частично: я решил поблему с серилизацией, но судя по всему придется отказаться от CArchive и соответственно от CSocketFile(подробности здесь - PRB: CArchive::Read Might Hang When Using CSocketFile http://support.microsoft.com/default.aspx?...kb;en-us;192704 - это же можно посмотреть в MSDNе) - а значит переписывать сервер ... ну это постепенно ... еще раз спасибо ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2005, 07:17 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32977486&tid=2033562]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 342ms |

| 0 / 0 |
