powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c#: сокет-сервер для разовых и длинных подключений
5 сообщений из 5, страница 1 из 1
c#: сокет-сервер для разовых и длинных подключений
    #39956373
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
В доке и примерах в основном описываются разовые подключения, т.е. клиент подключился, передал информацию и отключился.
Есть длинные подключения, когда клиент подключился и шлет данные, не закрывая сокет.

Схема работы:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Accept
while (Receive)
{
  data += полученные данные;
  if (Available == 0)
  {
    обрабатываем data;
    data = "";
  }
}
Close



При длинном подключении все отрабатывает нормально.

Если создавать разовые подключения, то данные могут приходить кусками.
Если перед if (Available == 0) сделать задержку, то все нормально, но задержки надо избежать.

Каким образом (асинхрон, проверка какого-то параметра, ...) можно в одном сервере обрабатывать данные разовых и длинных подключений?
...
Рейтинг: 0 / 0
c#: сокет-сервер для разовых и длинных подключений
    #39956413
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изменить первый пост не могу, поэтому пишу дополнение здесь.

Пару часов назад код работал нормально с длинными подключениями, получая на выходе сообщение целиком, но потом стали приходить куски, как и в случае с разовыми подключениями.
Если с разовыми можно не обнулять data и получить на выходе нужное сообщение, то длинные соединения суммируют все в data до тех пор, пока соединение не будет завершено.

Как правильно считывать сообщения?
В идеале нужен универсальный вариант, но пойдет хотя бы для длинных соединений.
...
Рейтинг: 0 / 0
c#: сокет-сервер для разовых и длинных подключений
    #39956469
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Il,

отправлять с каждым сообщением его размер

Модератор: Тема перенесена из форума "Программирование".
...
Рейтинг: 0 / 0
c#: сокет-сервер для разовых и длинных подключений
    #39956524
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Il
то данные могут приходить кусками

это неотъемлемое свойство протокола TCP/IP
...
Рейтинг: 0 / 0
c#: сокет-сервер для разовых и длинных подключений
    #39957324
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В каждом соединении может быть много сообщений, поэтому можно
- делать все сообщения фиксированной длины
- сделать префикс с указанием длины
- установить делиметер на котором сообщение заканчивается

Сообщение также может приходить любыми кусками, что значит может прийдти кусок префикса, а затем все оставшееся сообщение, либо его часть либо только следующая часть префикса и так далее в любых мысленных комбинациях. Это я все к тому, что написать вменяемый сокет продакшн уровня не имея особый знаний о нем - шансов нет. Лучше скачать что-то готовое из интернета и не изобретать велосипеды
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c#: сокет-сервер для разовых и длинных подключений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]