|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
Здравствуйте, пишу сокет клиент на c#. Принцип работы простой, клиент посылает строку запроса, сервер что то отвечает строкой ответа. Вот собственно сам клиент: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Отправляются данные нормально, но вот ответ с сервера не приходит. В чем может быть проблема? Заранее большое спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 14:00 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
Просто не успевает получить? Поставьте Sleep(1000) перед получением данных и проверьте ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 18:59 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
Столкнулся с таким же поведением, разрешилось только со Sleep'ом При этом, если использовался TcpClient, таких проблем не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 11:11 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
Arm79Поставьте Sleep(1000) перед получением данных бред сивой кобылы ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 12:53 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
ИзопропилArm79Поставьте Sleep(1000) перед получением данных бред сивой кобылы Почему бред? Написано же, проверить . Мало ли по каким причинам сервер не отвечает ))) Теперь убедились, что сервер работает нормально, просто клиент не знает, что ответ сервера нужно ждать. Нужно смотреть протокол прикладного уровня. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 12:55 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
Arm79Почему бред? Написано же, проверить для этого Socket.Select применяется(с таймером или без оного в зависимости от задачи) . бредом является использование Sleep ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 13:53 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
ИзопропилArm79Почему бред? Написано же, проверить для этого Socket.Select применяется(с таймером или без оного в зависимости от задачи) . бредом является использование Sleep Для проверки и слип подойдет. Гораздо быстрее, чем селект с этой точки зрения ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 14:05 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
Arm79Изопропилпропущено... для этого Socket.Select применяется(с таймером или без оного в зависимости от задачи) . бредом является использование Sleep Для проверки и слип подойдет. Гораздо быстрее, чем селект с этой точки зренияНе подойдёт. Подойдёт Read + соответствующий ReadTimeout. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 14:22 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
Arm79Для проверки и слип подойдет. Гораздо быстрее, чем селект с этой точки зрения в каком смысле быстрее? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 15:31 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
ИзопропилArm79Для проверки и слип подойдет. Гораздо быстрее, чем селект с этой точки зрения в каком смысле быстрее? В смысле написать и тут же протестить Чем потратить минут 10-20 чтобы прочитать хелп, применить селект и еще думать, ошибся или нет. Человек же явно не спец в разработке таких вещей, ему бы попроще что нить ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 16:02 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
Arm79Человек же явно не спец в разработке таких вещейпущай учится ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 18:35 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
"Лучше день потерять, потом за час долететь" (с) Sleep() надо вообще запретить. Ни разу не сталкивался чтобы он был реально нужен. Разве что при отладке. Зато из-за него было много случаев переписываний кода из состояния "лишь бы работало", в состояние "чтобы работало быстро". ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 20:05 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
Dima T"Лучше день потерять, потом за час долететь" (с) Sleep() надо вообще запретить. Ни разу не сталкивался чтобы он был реально нужен. Разве что при отладке. Зато из-за него было много случаев переписываний кода из состояния "лишь бы работало", в состояние "чтобы работало быстро". Ну зачем так опрометчиво то? Он например находит свое применение в реализации SpinWait или SpinLock. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 20:40 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
Dima TРазве что при отладке. Arm79Поставьте Sleep(1000) перед получением данных и проверьте Dima TНи разу не сталкивался чтобы он был реально нужен Ранее, до TPL, использовал Sleep(0) или Sleep(1) для переключения потоков или неблокирующего ожидания ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 23:17 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
C# только осваиваю, с многопоточностью и асинхронными операциями пока не разбирался, написал по своему опыту работы на Си с WinAPI. Там все асинхронные операции имеют возможность блокирующего ожидания завершения. При необходимости можно задать максимальное время ожидания. Используются WaitForSingleObject() или WaitForMultipleObject() но никак не Sleep() Если асинхронность не нужна - имеются синхронные аналоги. В данном случае надо именно такой аналог искать. Думаю в C# должна быть аналогичная ситуация. Оно поверх того же WinAPI работает. В данном случае вообще непонятно в чем проблема, судя по хэлпу Socket.Receive() блокирующая операция https://msdn.microsoft.com/ru-ru/library/ms145154(v=vs.110).aspx Если отсутствуют данные, доступные для чтения, метод Receive будет выполнять блокирование до тех пор, пока не станут доступны данные, если не было установлено значение тайм-аута путем использования объекта Socket.ReceiveTimeout.Если значение тайм-аута было превышено, объект Receive выдаст исключение SocketException.Если используется неблокирующий режим и отсутствуют данные в стековом буфере протокола, метод Receive немедленно завершится и создаст исключение SocketException.Чтобы определить наличие данных, доступных для чтения, можно использовать свойство Available.Когда значение свойства Available не равно нулю, повторите операцию приема. Скорее всего сервер просто закрывает соединение ничего не отвечая. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2015, 07:34 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
Dima TВ данном случае вообще непонятно в чем проблема.Было же выше посоветовано - увеличить ReadTimeout, извращенцы вместо этого могут использовать Sleep. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2015, 07:57 |
|
Почему клиент сокет не принимает данные от сервера?
|
|||
---|---|---|---|
#18+
ЕвгенийВDima T"Лучше день потерять, потом за час долететь" (с) Sleep() надо вообще запретить. Ни разу не сталкивался чтобы он был реально нужен. Разве что при отладке. Зато из-за него было много случаев переписываний кода из состояния "лишь бы работало", в состояние "чтобы работало быстро". Ну зачем так опрометчиво то? Он например находит свое применение в реализации SpinWait или SpinLock. Дочитал до этого места у Рихтера, могу прокомментировать. Sleep() тут используется не по прямому назначению: Sleep(0) - отдать оставшийся квант времени другому потоку с таким же приоритетом Sleep(1) - разрешить выполниться потоку с более низким приоритетом Просто нет функций WinAPI которые это сделают, поэтому используют Sleep(). Но это не говорит о том что Sleep() полезен всюду. Пусть он будет во внутренностях каких-то объектов (которые понимают эти тонкости), но в своем коде его не надо вызывать никогда. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2015, 20:38 |
|
|
start [/forum/topic.php?fid=20&fpage=72&tid=1401034]: |
0ms |
get settings: |
10ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 141ms |
0 / 0 |