![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
drZmeu |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 22.11.2006 Репутация: 1 Всего: 1 |
А можно примерчик
![]() А то у меня уже мозги закипают ![]() --------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code] |
|||
|
||||
leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
У меня вопрос. Может ли команда recv разбить принимаемую структуру на несколько частей. Например, я точно знаю, что сервер мне послал 10 байт. Может ли первый вызов recv вернуть меньше 10? Я пока от неуверенности , пользую эту функцию
|
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Да, recv возвращает только то, что пришло на данный момент. Поэтому количество байт может быть не больше того, что было затребовано.
P.S. если хочешь задать какой-нибудь вопрос, то лучше для этого создавать новую тему. Тем более что вопрос никак не связан с текущей темой. Это сообщение отредактировал(а) ptr - 6.6.2007, 15:11 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
intel |
|
||||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
После тово как получил структуру по сокету и запихал её в буфер, хочу привести тот самый буфер к типу структуры,
но компилятор кричит "так не пойдёт". Не пойму где я там касяк спорол Вот кусок кода:
А вот мой тип (подключаю в голове):
Спасибо |
||||
|
|||||
leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
((Data*)&buf)->x
|
|||
|
||||
intel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Спасибо leniviy, всё получилось
|
|||
|
||||
intel |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Вот ещё небольшая проблемка.
по сокету отправляю структуру в сторону клиента, но тот ничего не получает, хотя блок else выполняется. В структуре int и указатель на char. Вообщем вот кусок от server'а:
А вот от клиента:
Ну и моя структура до кучи:
Вот что выходит на консоль (у клента):
Сдаётся мне там чтото с char'ом не то... |
||||||||
|
|||||||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 1 Всего: 158 |
правильно сдается - ты пересылаешь указатель на строку, а не саму строку.
структура должна быть примерно такого вида:
и при получении надо учитывать тот момент, что данные, отосланные одним вызовом send, вовсе не обязательно придут одним куском - вполне возможно их нужно будет читать несколькими вызовами recv. |
|||
|
||||
intel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Спасибо dumb, скопировал твой предложенный вариант, заработало как по маслу,
вот тока не въеду што значят #pragma pack(push,1) и #pragma pack(pop)? В гугле ничево не нарыл, поясни если не затруднит |
|||
|
||||
Artemon |
|
|||
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Все так весело передают структуры по сокетам, даже не задумываясь о выравнивании струкуры в памяти.
Только лишь dumb не стал этим принебрегать (на то он и эксперт). #pragma pack(push,1) - отменяет выравнивание. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: нет Всего: 306 |
Комрады если уж сыр - бор про передачу инфы через сокеты - то как насчет юзанья структуры WSANETWORKEVENTS. А именно что бы сохранить инфу от сервера на клиенте скажим хотя бы в файл. Кто нибудь посоветует что нибудь? Пжаста!
Это сообщение отредактировал(а) mrbrooks - 20.9.2007, 15:15 |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 1 Всего: 158 |
||||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: нет Всего: 306 |
TCP/IP |
|||
|
||||
Skladnoy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 13.9.2007 Репутация: нет Всего: нет |
||||
|
||||
BasilL |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 26.5.2005 Где: Челябинск обл. Репутация: нет Всего: 1 |
Приветствую!
Не стал создавать новую тему - спрошу здесь имеем структуру
передаем
принимаем
все передается и принимаеться нормально. Но далее происходит вот что
Как только выполнение программы приходит на строку с if ((MsgRecv.MsgType) == "0100") условие срабатывает... Хотя в принятом MsgRecv.MsgType = "0004"... Смотрю в отладчике - да, все принимается ок, MsgType = "0004". Программа переходит на строку с проверкой условия - и MsgType становится равно "0100".... Пробовал менять значения в условии - что бы ни поставил, всегда MsgType становится равным ему... Как будто в if-е не "==" стоит, а "=".... В чем может быть дело? Это сообщение отредактировал(а) BasilL - 12.12.2008, 23:11 |
||||||||
|
|||||||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |