powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сокеты - несколько сообщений в одном коннекте
13 сообщений из 38, страница 2 из 2
Сокеты - несколько сообщений в одном коннекте
    #39277468
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя не, вот так правильнее, счетчик байтов надо вести:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
// Sends data to a connected Socket. 
int bytesSend = senderSock.Send(msgAll);

// Receives data from a bound Socket. 
byte[] messageHeaderBytes = new byte[2];

// Get header bytes first
int bytesHeader = senderSock.Receive(messageHeaderBytes);
int messageLength = HexToInt(ByteArrayToHexString(messageHeaderBytes));

// Now recieve message itself
byte[] messageBytes = new byte[messageLength];
int bytesRecievedTotal = 0;
int bytesRec = 0;

while (bytesRecievedTotal < messageLength)
  {
    bytesRec = senderSock.Receive(messageBytes, bytesRec, messageLength, SocketFlags.None);
    bytesRecievedTotal = bytesRecievedTotal + bytesRec;
   }



так точно должно быть верно
...
Рейтинг: 0 / 0
Сокеты - несколько сообщений в одном коннекте
    #39277469
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, уже заметил. Вообще почему у майкрософт ничего этого не написано совершенно непонятно. Более того, могли-бы и обертку вокруг этого создать
...
Рейтинг: 0 / 0
Сокеты - несколько сообщений в одном коннекте
    #39277472
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenford
Код: c#
1.
2.
3.
4.
5.
while (bytesRecievedTotal < messageLength)
  {
    bytesRec = senderSock.Receive(messageBytes, bytesRec, messageLength, SocketFlags.None);
    bytesRecievedTotal = bytesRecievedTotal + bytesRec;
   }



так точно должно быть верно
Опять ерунду написал. Пять строк сложно скопипастить?
...
Рейтинг: 0 / 0
Сокеты - несколько сообщений в одном коннекте
    #39277475
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хэлп на Receive() читай:
Код: c#
1.
сколько прочитано = socket.Receive(массив куда читать, смещение в массиве, размер сколько читать, SocketFlags.None)


"смещение в массиве" и "размер сколько читать" меняются после каждого чтения.
...
Рейтинг: 0 / 0
Сокеты - несколько сообщений в одном коннекте
    #39277478
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин точно, правильнее так:

bytesRec = senderSock.Receive(messageBytes, bytesRecievedTotal, messageLength, SocketFlags.None);

Однако зачем менять размер того сколько требуется прочитать? Раз можно указывать размер массива больше чем ожидаем, то пусть остается максимальная длина на всех итерациях.
Копипастить один-в-один не люблю))
...
Рейтинг: 0 / 0
Сокеты - несколько сообщений в одном коннекте
    #39277538
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должно работать, т.к. дочитает до конца массива. Но это нездорово на подобные умолчания опираться. Например завтра забудешь что к чему, поправишь так что массив станет больше messageLength и будешь изредка ловить мистические глюки.
Лучше так
Код: c#
1.
bytesRec = senderSock.Receive(messageBytes, bytesRecievedTotal, messageLength - bytesRecievedTotal, SocketFlags.None);
...
Рейтинг: 0 / 0
Сокеты - несколько сообщений в одном коннекте
    #39278068
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenfordага, уже заметил. Вообще почему у майкрософт ничего этого не написано совершенно непонятно. Более того, могли-бы и обертку вокруг этого создать"Нам бы только иностранное ругать." (ц)

NetworkStream - класс
...
Рейтинг: 0 / 0
Сокеты - несколько сообщений в одном коннекте
    #39278242
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Велосипедостроительство
...
Рейтинг: 0 / 0
Сокеты - несколько сообщений в одном коннекте
    #39278253
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Велосипедостроительствоэто не страшно
...
Рейтинг: 0 / 0
Сокеты - несколько сообщений в одном коннекте
    #39278322
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Велосипедостроительство
Критиковать каждый умеет, взял бы и подсказал пока постройка велосипеда шла. У меня пока практики на C# не много, чем смог - тем помог, раз уж знатоки молчат.
...
Рейтинг: 0 / 0
Сокеты - несколько сообщений в одном коннекте
    #39278333
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

А c# здесь ни при чём
...
Рейтинг: 0 / 0
Сокеты - несколько сообщений в одном коннекте
    #39278334
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилА c# здесь ни при чём
Я к тому что не везде есть готовые штатные велосипеды типа NetworkStream для данного случая.
...
Рейтинг: 0 / 0
Сокеты - несколько сообщений в одном коннекте
    #39278343
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИзопропилА c# здесь ни при чём
Я к тому что не везде есть готовые штатные велосипеды типа NetworkStream для данного случая.
Неужели? read/ReadFile из tcp сокета читают не хуже, чем recv
И без всяких обёрток
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сокеты - несколько сообщений в одном коннекте
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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