| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Socket client+server передается и принимается толь |
| Автор: 123456789igor 6.5.2014, 02:46 | ||||
| Я хочу постоянно передавать от сервера клиенту массив байт, но получается передать только 1 раз. Никак не пойму почему. Сервер:
Клиент:
Учитывать надо, что одновременных клиентов может быть несколько. Проблема в том, что на 2ой итерации Сервер ждет на "BeginAccept/EndAccept", а клиент на "BeginReceive/EndReceive". Т.е получается, что клиент готов получать, а сервер не знает об этом. Подскажите как решить проблему. Интересный факт: Если запустить сервер, затем клиент, то передастся массив 1 раз. Но если(ничего не закрываяя) открыть новый экземпляр клиента и выполнить его, то первый экземпляр пример 2ой раз массив. Если 2ой экземпляр клиента выполнить ещё раз, то первый примет 3ий массив. И так далее |
| Автор: Экскалупатор 6.5.2014, 11:22 |
| а почему не устраивает классический подход? когда сервер ничего ни о ком не знает и отвечает только на запросы клиента(как в идеале и должно быть). т.е. клиент делает запрос, сервер отдает ему пачку данных, клиент ее получает обрабатывает и сообщает серверу о том, что все принял и готов к следующей отправке или о том, что что то сломалось и предыдущая отправка не прошла и ее надо еще раз отправить. так будет ровнее все это выглядеть и работать. и лучше что бы сервер не хранил состояние, тогда будет меньше зависимостей и потенциальных точек отказа. З.Ы. а перестает слать, очевидно, из-за того, что закрывается соединение и сервер не инициирует новое(и это правильно). |
| Автор: 123456789igor 6.5.2014, 14:34 | ||
Можно по подробнее? Как это реализовать? Получается на стороне сервера и не нужен цикл? или я не так понял? |
| Автор: 123456789igor 6.5.2014, 15:09 |
| Думаю просто не хватает каких то колбэков что бы снова связать клиент и сервер. Но каких не могу понять |
| Автор: 123456789igor 7.5.2014, 20:16 |
| если у сервера убрать цикл, то все равно только 1 раз отправляет |
| Автор: Экскалупатор 7.5.2014, 20:42 | ||
какой именно цикл имеется ввиду? сервер должен выполнять в цикле операцию обработки входящих запросов. т.е. 1. сервер стартует 2. привязывается к порту 3. ждет подключения 4. при подключении создает поток для обработки 5. запускает его(сам в процессе не учавствует) 6. возвращаемся к пункту 3. з.ы. Про то что не нужен цикл, я имел ввиду что не нужно в цикле отдавать много ответов на один запрос. |