Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 11.12.2017
Сообщений: 96

Отправка и прием TCP пакетов

02.08.2018, 07:29. Показов 3960. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, пишу тсп клиент сервер. Все бы ничего но с толкнулся с такой проблемой при отправке клиентом нескольких пакетов с данными (строки) на сервер приходит каша, тоесть строки приходят в перемешку. например отправляю с клиента 1строка и вслед за ней 2строка, на сервер приходит: 1строкарока. Подскажите как исправить данное недоразумение?

Сервер

PureBasic
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
33
34
35
36
37
38
39
40
41
42
43
If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf
;Port = 17890
Port = 6832
*Buffer = AllocateMemory(1000)
 
If CreateNetworkServer(0, Port)
 
  ;MessageRequester("PureBasic - Server", "Server created (Port "+Str(Port)+").", 0)
   
  Repeat
      
    SEvent = NetworkServerEvent()
  
    If SEvent
    
      ClientID = EventClient()
  
      Select SEvent
      
        Case #PB_NetworkEvent_Connect
                 
          AddGadgetItem(0,-1,IPString(GetClientIP(ClientID)) + ":" + Str(ClientID))
                 Case #PB_NetworkEvent_Data
               Debug (PeekS(*Buffer, -1, #PB_UTF8))
             ReceiveNetworkData(ClientID, *Buffer, 1000)
 
If FindString(PeekS(*Buffer, -1, #PB_UTF8),"[stroka]",1)
         For i = 0 To CountGadgetItems(0)-1
             FindString(GetGadgetItemText(0,i,0), Str(ClientID),1)          
             SetGadgetItemText(0,i,StringField(PeekS(*Buffer, -1, #PB_UTF8), 2, ":"),1)
              Debug PeekS(*Buffer, -1, #PB_UTF8)
          Next
        EndIf
If FindString(PeekS(*Buffer, -1, #PB_UTF8),"[stroka1]",1)
         For i = 0 To CountGadgetItems(0)-1
             FindString(GetGadgetItemText(0,i,0), Str(ClientID),1)          
             SetGadgetItemText(0,i,StringField(PeekS(*Buffer, -1, #PB_UTF8), 2, ":"),2)
              Debug PeekS(*Buffer, -1, #PB_UTF8)
          Next
        EndIf

Клиент:
PureBasic
1
2
3
4
5
6
7
8
9
10
InitNetwork()
Global Port = 6832
*Buffer = AllocateMemory(1000)
 
  ConnectionID = OpenNetworkConnection("127.0.0.1", Port) 
 If ConnectionID
 SendNetworkString(ConnectionID, "[stroka]:строка1:[stroka]", #PB_UTF8)
 Delay(1000)
SendNetworkString(ConnectionID, "[stroka1]:строка2:[stroka1]", #PB_UTF8)
 Delay(1000)
Решением проблемы якобы нашел тему, но не могу разобраться и данные примеры не компилятся в моем 5.60 х86, прошу помощи у гуру
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.08.2018, 07:29
Ответы с готовыми решениями:

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

UDP отправка и прием пакетов
Вообщем такая ситуация. Отправляю пакеты объемом по 1 кБайту, пачками по 32 через определенное время (маленькое). Вообщем около 8000...

Библиотека для работы (отправка и прием пакетов) с AMF
Нужен компонент или библиотека для работы(отправка и прием пакетов) с AMF, может есть какие хитрости. QenT, ПравилаИзначальное...

10
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
02.08.2018, 09:57
Цитата Сообщение от error_systems Посмотреть сообщение
примеры не компилятся
Подсветка форума искажает код.
Найдите в коде это
|/1/>
и удалите.
Пример :
Protected *|/1/>Data.NetPacket_Data = *BuffInfo\Buff
Должно быть:
Protected *Data.NetPacket_Data = *BuffInfo\Buff
1
0 / 0 / 0
Регистрация: 11.12.2017
Сообщений: 96
02.08.2018, 10:31  [ТС]
Спасибо за подсказку с кодом примера. Но строки в столь запутанном и сложном в понимании коде прилетаю также каряво как и в моем..


Первая строкаЕще строка
Еще строкаСтрока №
Строка № 3$Больше н
Больше нет строк
0
Эксперт по электронике
6582 / 3209 / 335
Регистрация: 28.10.2011
Сообщений: 12,514
Записей в блоге: 7
02.08.2018, 10:46
Нужно разработать протокол обмена. Создание протокола прикладного уровня
0
0 / 0 / 0
Регистрация: 11.12.2017
Сообщений: 96
02.08.2018, 10:51  [ТС]
собственно об этом примере и идет речь в вышеприведенной мной ссылке, последний мой пост показывает что код в нем не работает, отправленные строки точно также переплетаются
0
Эксперт по электронике
6582 / 3209 / 335
Регистрация: 28.10.2011
Сообщений: 12,514
Записей в блоге: 7
02.08.2018, 11:34
Лучший ответ Сообщение было отмечено error_systems как решение

Решение

С юникодными строками нужно немного изменить код клиента.
PureBasic
1
Debug PeekS(@*|/1/>Data\Buff[0], (*|/1/>Data\Header\Size-OffsetOf(NetPacket_Data\Buff))/2)
1
0 / 0 / 0
Регистрация: 11.12.2017
Сообщений: 96
02.08.2018, 17:38  [ТС]
В точку!, спасибо

Добавлено через 5 часов 10 минут
Разобрался мало по мальски в коде. Уважаемый Locm подскажи можно ли из 3 процедур для приема данных сделать одну ?
чтобы было всего 2 send и resv? для меня на данном этапе сильно сложно это сделать.
0
Эксперт по электронике
6582 / 3209 / 335
Регистрация: 28.10.2011
Сообщений: 12,514
Записей в блоге: 7
02.08.2018, 17:59
Зачем изменять код если и так работает?

Не по теме:

Сидит программист глубоко в отладке. Подходит сынишка:
- Папа, почему солнышко каждый день встаёт на востоке, а садиться на западе?
- Ты это проверял?
- Проверял.
- Хорошо проверял?
- Хорошо.
- Работает?
- Работает.
- Каждый день работает?
- Да, каждый день.
- Тогда ради бога, сынок, ничего не трогай и не меняй.

0
0 / 0 / 0
Регистрация: 11.12.2017
Сообщений: 96
02.08.2018, 18:00  [ТС]
и еще вопрос процедура почему Net_InData не возвращает полученные данных?
, их можно посмотреть только внутри процедуры
0
Эксперт по электронике
6582 / 3209 / 335
Регистрация: 28.10.2011
Сообщений: 12,514
Записей в блоге: 7
02.08.2018, 18:35
Можно сделать чтобы возвращала, но следует учитывать что при ее вызове данных может вовсе не быть (принят ьне весь пакет), или будет возвращено несколько пакетов.
0
0 / 0 / 0
Регистрация: 11.12.2017
Сообщений: 96
09.08.2018, 07:19  [ТС]
Братья программисты чтобы не создавать новой темы спрошу тут, так как касается этой темы: отравляю клиенту строку, длинную, в дебиге клиента входящих данных строка полностью, но в GUI строка обрезана, также при запуске из этой строки программы, параметр также не полностью передается, как можно данный недостаток убрать?

Добавлено через 11 часов 32 минуты
Вопрос не актуальный, делил строку по символу, и не заметил что есть в строке еще один символ деления
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.08.2018, 07:19
Помогаю со студенческими работами здесь

Прием и отправка пакетов "Яндексу", исправить код
Помогите найти ошибку в тестовом коде суть программы элементарна, при наборе в браузере 127.0.0.1 должна загружаться страничка яндекса,...

Прием UDP пакетов
Здравствуйте. Сразу скажу, никогда не имел дело с сокетами, тем более с UDP. Сервер у меня на python и с ним проблем никаких нет, клиент...

Прием пакетов по UDP
Приветствую. С сетевыми протоколами раньше дела не имел. Начал сразу к практике приступать. Хотел посмотреть, как вообще реализовать...

Receive прием пакетов
День добрый! Подскажите как получить весь ответ от запроса к сайту, с помощью Receive. Пробовал делать цикл пока Receive не вернет 0, но...

Прием и передача пакетов по сети.
КАК ПЕРЕДАТЬ ИЛИ ПОЛУЧИТЬ ПАКЕТ ПО СЕТКЕ, ХОТЯ БЫ В ОБЩЕМ ПРИНЦИП ИЛИ ФУНКЦИИ. ЗАРАНЕЕ ВСЕМ СПАСИБО.


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru