|
c#: сокет-сервер для разовых и длинных подключений
|
|||
---|---|---|---|
#18+
Добрый день. В доке и примерах в основном описываются разовые подключения, т.е. клиент подключился, передал информацию и отключился. Есть длинные подключения, когда клиент подключился и шлет данные, не закрывая сокет. Схема работы: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
При длинном подключении все отрабатывает нормально. Если создавать разовые подключения, то данные могут приходить кусками. Если перед if (Available == 0) сделать задержку, то все нормально, но задержки надо избежать. Каким образом (асинхрон, проверка какого-то параметра, ...) можно в одном сервере обрабатывать данные разовых и длинных подключений? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 16:49 |
|
c#: сокет-сервер для разовых и длинных подключений
|
|||
---|---|---|---|
#18+
Изменить первый пост не могу, поэтому пишу дополнение здесь. Пару часов назад код работал нормально с длинными подключениями, получая на выходе сообщение целиком, но потом стали приходить куски, как и в случае с разовыми подключениями. Если с разовыми можно не обнулять data и получить на выходе нужное сообщение, то длинные соединения суммируют все в data до тех пор, пока соединение не будет завершено. Как правильно считывать сообщения? В идеале нужен универсальный вариант, но пойдет хотя бы для длинных соединений. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 18:35 |
|
c#: сокет-сервер для разовых и длинных подключений
|
|||
---|---|---|---|
#18+
Андрей Il, отправлять с каждым сообщением его размер Модератор: Тема перенесена из форума "Программирование". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 20:47 |
|
c#: сокет-сервер для разовых и длинных подключений
|
|||
---|---|---|---|
#18+
Андрей Il то данные могут приходить кусками это неотъемлемое свойство протокола TCP/IP ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 22:01 |
|
c#: сокет-сервер для разовых и длинных подключений
|
|||
---|---|---|---|
#18+
В каждом соединении может быть много сообщений, поэтому можно - делать все сообщения фиксированной длины - сделать префикс с указанием длины - установить делиметер на котором сообщение заканчивается Сообщение также может приходить любыми кусками, что значит может прийдти кусок префикса, а затем все оставшееся сообщение, либо его часть либо только следующая часть префикса и так далее в любых мысленных комбинациях. Это я все к тому, что написать вменяемый сокет продакшн уровня не имея особый знаний о нем - шансов нет. Лучше скачать что-то готовое из интернета и не изобретать велосипеды ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 11:41 |
|
|
start [/forum/topic.php?fid=20&fpage=10&tid=1398552]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
74ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 185ms |
0 / 0 |