Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 07.11.2010
Сообщений: 16

Ошибка передачи данных - сокеты

25.12.2010, 11:16. Показов 1193. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема состоит в следующем: работаю с сокетами, пытаюсь передать три строки от клиента к серверу по протоколу TCP. Привожу кусок кода из клиента:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char path_to_file[256],finded_str[1024],replace_str[1024];
    // чтение сообщений с texBOx'a
 
    strcpy_s(&path_to_file[0], sizeof(path_to_file), SysStringToChar(Source_File_Name_TextBox->Text)); 
    //передача имени файла серверу
    send(my_sock, &path_to_file[0], strlen(&path_to_file[0]), 0);
 
    strcpy_s(&finded_str[0], sizeof(finded_str), SysStringToChar(String_for_Search_TextBox->Text));
    //передача строки для поиска серверу
    send(my_sock, &finded_str[0], strlen(&finded_str[0]), 0);
 
    strcpy_s(&replace_str[0], sizeof(replace_str), SysStringToChar(String_For_Replace_TextBox->Text));
    //передача строки для замены серверу
    send(my_sock, &replace_str[0], strlen(&replace_str[0]), 0);
При трассировке данного кода получаю следующую картину (см. первое вложение)...
Далее кусочек кода сервера, где идет прием данных:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
char finded_str[1024], replace_str[1024];
             char path_to_file[256];
             int bsize_path, bsize_finded, bsize_replace;
             //прием запроса-пароля от клиента
             while (1)
            {       
                // прием пути до файла
                int bsize_path = recv(my_sock,&path_to_file[0],sizeof(path_to_file),0);
                if (bsize_path == SOCKET_ERROR)
                {
                    //сообщение об ошибке
                    break;
                }               
 
                // прием строки для поиска
                int bsize_finded = recv(my_sock,&finded_str[0],sizeof(finded_str),0);
                if (bsize_finded == SOCKET_ERROR)
                {
                    //сообщение об ошибке
                    break;
                }               
 
                //прием строки для замены
                int bsize_replace = recv(my_sock,&replace_str[0],sizeof(replace_str),0);
                if (bsize_replace == SOCKET_ERROR)
                {
                    //сообщение об ошибке
                    break;
                }
                     path_to_file[bsize_path] = '\0';
                     finded_str[bsize_finded] = '\0';
                     replace_str[bsize_replace] = '\0';
Первая (path_to_file) строка приходит нормально(без завершающего нуля), а вот вторая строка (finded_str) приходит в виде "string_1string_2", хотя должно быть просто string_1, ну и после второго recv сервер виснет в ожидании третьей строки, хотя она была отослана,но почему-то пришла "склеенной" со второй. Подскажите, пожалуйста в чем может быть ошибка. Заранее спасибо!
Миниатюры
Ошибка передачи данных - сокеты   Ошибка передачи данных - сокеты  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.12.2010, 11:16
Ответы с готовыми решениями:

Сокеты. Отправка данных
Осваиваю работу с сокетами по этому пособию http://www.firststeps.ru/mfc/net/socket Возникла проблема, с отправкой данных! Суть такая:...

Сокеты получение\отправка данных
Привет, друг показал программку с использованием сокетов ну у меня и возникла одна идея как можно использовать такого рода программу....

Передача данных между программами (сокеты)
В общем, есть 2 программы, между которыми нужно передавать данные. Хотелось бы организовать это с помощью сокетов. Язык С++, пишу в...

2
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
25.12.2010, 11:35
top_coder, я в этом не особо силен, но мне кажется нужна какая то синхронизация, а у тебя все валится в сеть подряд
0
0 / 0 / 0
Регистрация: 07.11.2010
Сообщений: 16
25.12.2010, 11:43  [ТС]
согласен, но только вот какая именно синхронизация?
На UDP этим же кодом валил также три строки подряд, там доходили сообщения нормально (recfrom и sendto).
Мне кажется странным в этой версии то,что если отсылать без "синхронизации" две строки, то они доходят нормально, а если три, то третья приклеивается ко второй. Может быть где-то в другом месте собака зарыта?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.12.2010, 11:43
Помогаю со студенческими работами здесь

Сокеты. Прием данных клиентом от сервера
Здравствуйте. Задача такая: Клиент отправляет серверу данные, сервер, исходя из полученных данных, обращается к БД, результат запроса нужно...

Сокеты: отключение ожидания приёма данных
мне надо Recv сделать на 10 у секунду а не на бесконечное зависание, как это сделать? (помоему setsockport нужен с правильными параметрами )

Ошибка при обращению к серверу (сокеты) ftp.
При реализации функции передачи данных от сервера ftp клиенту выдает ошибку "Invalid Patch!"... Может я неправильно прописываю путь?...

Скорость передачи данных
Нужно определить скорость передачи данных по сети. Используется TCP соединение. есть какие-либо предложения по этому поводу?

Контроль передачи данных COM порта
Здравствуйте. Есть ли стандартная (встроенная, системная) система контроля передачи данных через COM порт? Добавлено через 2 минуты ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru