Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: Сети
Войти
Регистрация
Восстановить пароль
 
KrYpToDeN
3 / 3 / 1
Регистрация: 10.01.2015
Сообщений: 69
1

Отправка сразу несколько пакетов. WinSock

10.08.2015, 18:12. Просмотров 398. Ответов 6
Метки нет (Все метки)

Привествую всех.

В вообщем так.

Программа ищет на компьютере разную информацию с разных адресов и отправляет её через send().
Вторая программа, в свою очередь получает эти данные.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
                        char buffer[2048];
                        while ((readBytes = recv(clientSocket, buffer, sizeof(buffer), 0)) > 0)
                        {
                            //printf("%d", readBytes);
                            printf("1)%d,%d\n", readBytes, strlen(buffer));
                            buffer[readBytes] = 0;
                            printf("2)%d,%d\n", readBytes, strlen(buffer));
                            int j = fputs(buffer, f);
                            int size = ftell(f);
                            printf("%d,%d - %s\n", readBytes, strlen(buffer), buffer);
                            buffer[0] = 0;
                        }
Вот код получения.
Send, я думаю нет смысла отсылать. Там всё отсылается друг за другом разного размера.

Такая проблема:
Отсылается всё. Приходит всё, НО может прийти как-то не корректно.
Тоесть так:

Первый раз отослано к примеру 100 байт, пришло 100 байт.
Во второй раз отослано 120 байт, пришло 150 байт. Откуда лишние байты? Как исправить?
До третьего раза программа просто не доходит, так как происходит вылет из за предела массива.
Тестил через отладчик. так и получается..

Тоесть, насколько я понял, первые данные не все успевают прийти, а уже идут другие..хотя..странно.
Просьба помочь, пожалуйста!

P.S. данные отсылаются размера меньше, чем размер буффера!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2015, 18:12
Ответы с готовыми решениями:

Отправка пакетов на открытый сокет WinSock 1.1
Здравствуйте форумчане. И так, мы имеем клиент, который отправляет и принимает...

Отправка файла (HTTP+Winsock)
Добрый вечер. Опять столкнулся с проблемой, которую без вашей помощи не...

Winsock отправка http post запроса
возникла необходимость в отправке post запроса, std::string get = "POST...

Прием и отправка пакетов
Всем привет! Нужно отправить определенной структуры пакет серверу на порт...

Отправка UDP пакетов с задержкой в 5 мкс
Здравствуйте.Как раз не давно с толкнулся с проблемой реализации отправки UDP...

6
Velesthau
524 / 427 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.08.2015, 18:30 2
Цитата Сообщение от KrYpToDeN Посмотреть сообщение
Тоесть, насколько я понял, первые данные не все успевают прийти, а уже идут другие..хотя..странно.
В TCP порядок пакетов соблюдается. Данные у тебя перемешиваться не будут. А что у тебя в этих "лишних" байтах?
Проверь через wireshark, что за данные приходят на порт и какие отправлены.
0
Убежденный
Ушел с форума
Эксперт С++
16128 / 7275 / 1181
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
10.08.2015, 18:36 3
Цитата Сообщение от KrYpToDeN Посмотреть сообщение
Во второй раз отослано 120 байт, пришло 150 байт. Откуда лишние байты?
Ну например, 120 байт второй отправки плюс 30 байт третьей. В TCP это типично.

Цитата Сообщение от KrYpToDeN Посмотреть сообщение
До третьего раза программа просто не доходит, так как происходит вылет из за предела массива.
Для работы strlen нужно, чтобы буфер заканчивался нулем.
1
Velesthau
524 / 427 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.08.2015, 18:39 4
Цитата Сообщение от KrYpToDeN Посмотреть сообщение
данные отсылаются размера меньше, чем размер буффера!
Читаешь ты все равно столько, сколько сможешь (или сколько хочешь). А не по тому размеру, по которому ты отправлял их.
1
KrYpToDeN
3 / 3 / 1
Регистрация: 10.01.2015
Сообщений: 69
10.08.2015, 19:12  [ТС] 5
оо исправил, изменив
PHP
1
while ((readBytes = recv(clientSocket, buffer, sizeof(buffer), 0)) > 0)
на
PHP
1
while ((readBytes = recv(clientSocket, buffer, sizeof(buffer)-1, 0)) > 0)
Всем спасибо за советы)

Тоесть насколько я понял,
Придёт же в том же порядке, в каком отправил? могут ли быть несовпадения?
0
Enno
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
10.08.2015, 19:15 6
Цитата Сообщение от KrYpToDeN Посмотреть сообщение
могут ли быть несовпадения?
Что понимать под "несовпадениями"?
0
Velesthau
524 / 427 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.08.2015, 19:21 7
Цитата Сообщение от KrYpToDeN Посмотреть сообщение
Придёт же в том же порядке, в каком отправил?
Да. Только ты не узнаешь, какими порциями ты их посылал.
1
10.08.2015, 19:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2015, 19:21

(Winsock) Сервер - Несколько клиентов
В msdn есть пример создания сервера, который принимает 1 соединение. Не могу...

Отправка на несколько сайтов сразу
Есть код который отправляет POST запрос на определенный сайт, теперь надо...

Winsock: перенаправление пакетов
Здравствуйте, подскажите, как заставить Winsock перенаправлять пакеты. Например...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru